SQL | Ajuda Oracle

Bom dia amigos,
Estou com um problema, não estou conseguindo cumprir com a exigência da solicitação, gostaria de uma ajudinha se possível conforme abaixo:

Objetivo:

Listar na tela:

Nome e quantidade de amigos de todos os usuário que possuírem mais do que X amigos (informado como parâmetro no procedimento). A cada impressão de usuário o procedimento deverá listar o nome dos amigos deste usuário.

tbusuario (pkcodusu,nomeusu,datanasc,sexo,quantamigosativos)
tbamigos(fkcodusua,fjkcodusuab,bloqueado)

Esse foi o procedimento que fiz, mas não esta mostrando na tela:

CREATE OR REPLACE PROCEDURE busca_amigo(p.nomeamigo IN varchar2, p.nomeamigo OUT varchar2,pqtd in number)
IS
BEGIN
SELECT COUNT(u.nomeusu) as qtdeamigo
INTO p.nomeamigo
FROM TBusuario u, TBamigo a
WHERE u.nomeusu = p.nomeusu
AND u.pkcodusu = a.fkcodusu;
GROUP BY u.pkcodusu
HAVING count(u.nomeusu) >= pqtd;
IF SQL%NOTFOUND
THEN raise_application_error(‘20013,’Nome Invalido!’p.nome);
END IF
END;

Desde já agradeço pela atenção!

Aparentemente, você está fazendo a procedure no Oracle, certo?

Sua procedure está valida? Aparentemente, existem erros de sintaxe.

Na linha abaixo, existem aspas simples a mais e você não está concatenando o resultado corretamente. Veja se não tem que trocar o

raise_application_error(‘20013,’Nome Invalido!’p.nome);

por

raise_application_error(20013,’Nome Invalido!’||p.nomeamigo);

@rafaelbortoletto Oracle, correto.
Existem erros, fiz a alteração que sugeriu mas mesmo assim persiste a mensagem:
"ERROR na linha 1: PLS-00103: Encontrado o símbolo “.” quando um dos seguintes símbolos era esperado:

in out
… LONG_
double ref char time timestamp interval date binary national
character nchar
"
Fiz umas alterações e criei essa procedure, roda, mas não mostra na tela o resultado esperado que seria:


O usuário xuxa possui três amigos
Lista de amigos de xuxa
Nome: Gugu
Nome: Eliana
Nome: Patata


Grata pela atenção.

O erro ocorre pois, você está chamando a procedure com

   ` CREATE OR REPLACE PROCEDURE busca_amigo(p.nomeamigo IN varchar2, p.nomeamigo OUT varchar2,pqtd in number)`

troque para

    CREATE OR REPLACE PROCEDURE busca_amigo(pNomeamigo IN varchar2, pNomeamigo OUT varchar2,pqtd in number)

Note que foi removido o . que separa o p do resto do nome das variaveis.

Além disso, para mostrar na tela, inclua um DBMS_OUTPUT.PUT_LINE(‘Nome:’||p.nomeamigo);

antes do IF SQL%NOTFOUND

@rafaelbortoletto grata pela ajuda!

:slight_smile:

Abração