package

Dúvidas, dicas e truques de PL/SQL. Aqui também vão assuntos relacionados a pacotes, triggers, funções, Java-Stored Procedures, etc
Responder
eduardo.d2
Rank: Programador Sênior
Rank: Programador Sênior
Mensagens: 67
Registrado em: Ter, 08 Jan 2008 9:13 pm
Localização: são paulo
Eduardo Andrade

Olá a todos estou criando uma package, mais o mesmo esta retornando com erro !!

Selecionar tudo

PL/SQL:ORA-00947:não há valores suficientes
segue a package

Selecionar tudo

PROCEDURE EC_LOGIN(P_CD_SENHA          IN  NUMBER   ,
                   P_DC_EMAIL_PESSOA   IN  VARCHAR2 ,
                   P_CD_PESSOA         IN  NUMBER   ,
                   P_CD_LOGIN         OUT  NUMBER   , 
                   P_SQL_CODE         OUT  NUMBER   ,
                   P_SQL_MSG          OUT  VARCHAR2 )
 IS
  BEGIN
  P_SQL_CODE := 0;
  P_SQL_MSG  :='';
  
 SELECT B.DC_EMAIL_PESSOA,
        A.CD_SENHA
  INTO  P_CD_LOGIN  
 FROM   T_PESSOA A,
        T_EMAIL_PESSOA B
 WHERE A.CD_PESSOA       = B.CD_PESSOA
 AND   A.CD_SENHA        = P_CD_SENHA
 AND   B.DC_EMAIL_PESSOA = P_DC_EMAIL_PESSOA
 ;
 EXCEPTION 
     WHEN OTHERS THEN 
         P_SQL_CODE :=SQLCODE;
         P_SQL_MSG  :='USUARIO OU SENHA INVALIDA !!'
         ; 
         
END EC_LOGIN;   
muito obrigado pela força até breve
Leo Bil
Rank: Programador Júnior
Rank: Programador Júnior
Mensagens: 24
Registrado em: Qua, 21 Fev 2007 11:18 am
Localização: montes claros minas gerais

acho q você esta pegando 2 campos e dando um into em 1 so
eduardo.d2
Rank: Programador Sênior
Rank: Programador Sênior
Mensagens: 67
Registrado em: Ter, 08 Jan 2008 9:13 pm
Localização: são paulo
Eduardo Andrade

mais eu acho que não , porque o erro já aponta para essa linha, e também nunca vi into com dois campos .

Valeu pela força !!!
ruevers
Rank: DBA Sênior
Rank: DBA Sênior
Mensagens: 324
Registrado em: Sex, 02 Jun 2006 1:48 pm
Localização: sp
Contato:

A criança de cima está certa....
dois campos no select, vai precisar de 2 no into tambem.
eduardo.d2
Rank: Programador Sênior
Rank: Programador Sênior
Mensagens: 67
Registrado em: Ter, 08 Jan 2008 9:13 pm
Localização: são paulo
Eduardo Andrade

DESCULPA ENTÃO MAIS AGORA ESTA ME RETORNANDO ESSE ERRO !!!

Selecionar tudo

Error: PLS-00323: o subprograma ou o cursor 'EC_LOGIN' está declarado em uma especificação de pacote e deve ser definido no texto do pacote
ruevers
Rank: DBA Sênior
Rank: DBA Sênior
Mensagens: 324
Registrado em: Sex, 02 Jun 2006 1:48 pm
Localização: sp
Contato:

Criança...
está fazendo ERRADO....

olha o que fiz e funcionou.

presta atençã na parte:

Selecionar tudo

 11   SELECT username,
 12          status
 13    INTO  P_CD_LOGIN,
 14     p_sql_code
 15   FROM   v$session;

cada camp...tem que ter outra variável pra into....

segue o exemplo abaixo criado sem erros...NÃO VAI COPIAR E COLAR QUE USEI OUTRA TABELA....SÓ PRA EXEMPLIFICAR...ENTENDEU?

Selecionar tudo

  1  create or replace PROCEDURE EC_LOGIN(P_CD_SENHA          IN  NUMBER   ,
  2                     P_DC_EMAIL_PESSOA   IN  VARCHAR2 ,
  3                     P_CD_PESSOA         IN  NUMBER   ,
  4                     P_CD_LOGIN         OUT  NUMBER   ,
  5                     P_SQL_CODE         OUT  NUMBER   ,
  6                     P_SQL_MSG          OUT  VARCHAR2 )
  7   IS
  8    BEGIN
  9    P_SQL_CODE := 0;
 10    P_SQL_MSG  :='';
 11   SELECT username,
 12          status
 13    INTO  P_CD_LOGIN,
 14     p_sql_code
 15   FROM   v$session;
 16   EXCEPTION
 17       WHEN OTHERS THEN
 18           P_SQL_CODE :=SQLCODE;
 19           P_SQL_MSG  :='USUARIO OU SENHA INVALIDA !!'
 20           ;
 21* END EC_LOGIN;
SQL> /
Procedimento criado.
Avatar do usuário
Toad
Rank: DBA Pleno
Rank: DBA Pleno
Mensagens: 253
Registrado em: Sex, 18 Nov 2005 2:14 pm
Localização: Seattle, WA
Contato:
Matheus Gonçalves
matheus.dev
twitter.com/developer__c

Criança Anderson (ruevers):

Acho que funciona sim.
Mas seria interessante todos nós usarmos a tag CODE do forum, para ficar mais claro.

Veja:

Selecionar tudo

1 create or replace PROCEDURE EC_LOGIN(P_CD_SENHA IN NUMBER ,
2                                      P_DC_EMAIL_PESSOA IN VARCHAR2 ,
3                                      P_CD_PESSOA IN NUMBER ,
4                                      P_CD_LOGIN OUT NUMBER ,
5                                      P_SQL_CODE OUT NUMBER ,
6                                      P_SQL_MSG OUT VARCHAR2 ) IS
7
8 BEGIN
9   P_SQL_CODE := 0;
10  P_SQL_MSG :='';
11  SELECT username  , status    --Para cada ítem do select
12    INTO P_CD_LOGIN,p_sql_code --uma variável do INTO
13 FROM v$session;
14
15 EXCEPTION
16  WHEN OTHERS THEN
17    P_SQL_CODE :=SQLCODE;
18    P_SQL_MSG :='USUARIO OU SENHA INVALIDA !!';
19 END EC_LOGIN; 
:wink:
crsouza
Rank: Estagiário Júnior
Rank: Estagiário Júnior
Mensagens: 1
Registrado em: Qui, 27 Mar 2008 9:06 pm
Localização: Araçatuba - São Paulo

Toda packages no oracle tem duas partes, isto grosseiramente falando
Package Especification
Package Body

você deve ter criado apenas a Body. Por favor verifique.
Avatar do usuário
Toad
Rank: DBA Pleno
Rank: DBA Pleno
Mensagens: 253
Registrado em: Sex, 18 Nov 2005 2:14 pm
Localização: Seattle, WA
Contato:
Matheus Gonçalves
matheus.dev
twitter.com/developer__c

Não, cara.
Eu não criei a package. Eu só usei o código acima postado para exemplificar que devemos sempre usar a tag CODE para ficar mais fácil de entender.
Responder
  • Informação
  • Quem está online

    Usuários navegando neste fórum: Nenhum usuário registrado e 1 visitante