SQL | Ajuda Oracle

4 respostas
M

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!

4 Respostas

rafaelbortoletto

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);

M

@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.

rafaelbortoletto

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

M

@rafaelbortoletto grata pela ajuda!

:slight_smile:

Abração

Criado 26 de setembro de 2017
Ultima resposta 1 de out. de 2017
Respostas 4
Participantes 2