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!
Abração