Select into não aceita de uma linha

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
pnet1
Rank: Analista Júnior
Rank: Analista Júnior
Mensagens: 73
Registrado em: Qui, 23 Jan 2020 9:12 pm

esse bloco

Selecionar tudo

DECLARE

    V_CODSUP TAKB437T_HIER_SAP.CODSUP%TYPE;
    V_CODFUNC TAKB437T_HIER_SAP.CODFUNC%TYPE;
    V_COUNT NUMBER;

BEGIN
    SELECT
       CODSUP INTO V_CODSUP
    FROM TAKB437T_HIER_SAP
    WHERE
       CODFUNC IN(4000951, 4002572);
       
END;
como eu faço para guardar o retorno, caso haja, numa variável? Dessa forma não funciona. Achei que o type, desse a variável um tipo de coluna, aceitando assim vários results.
pnet1
Rank: Analista Júnior
Rank: Analista Júnior
Mensagens: 73
Registrado em: Qui, 23 Jan 2020 9:12 pm

Esse é o erro

Selecionar tudo

Error starting at line : 3 in command -
DECLARE

    V_CODSUP TAKB437T_HIER_SAP.CODSUP%TYPE;
    V_CODFUNC TAKB437T_HIER_SAP.CODFUNC%TYPE;
    V_COUNT NUMBER;

BEGIN

    /*SELECT
       COUNT(ID_DADOS_CADASTRAIS) INTO V_COUNT
    FROM DADOS_CADASTRAIS
    WHERE
       FL_SITUACAO = 'P';*/

    SELECT
       CODSUP INTO V_CODSUP
    FROM TAKB437T_HIER_SAP
    WHERE
       CODFUNC IN(4000951, 4002572);

    IF SQL%FOUND THEN
        DBMS_OUTPUT.PUT_LINE(V_CODSUP);
    END IF;

END;
Error report -
ORA-01422: exact fetch returns more than requested number of rows
ORA-06512: at line 15
01422. 00000 -  "exact fetch returns more than requested number of rows"
*Cause:    The number specified in exact fetch is less than the rows returned.
*Action:   Rewrite the query or change number of rows requested
Avatar do usuário
dr_gori
Moderador
Moderador
Mensagens: 5024
Registrado em: Seg, 03 Mai 2004 3:08 pm
Localização: Portland, OR USA
Contato:
Thomas F. G

Você já respondeu a dúvida de alguém hoje?
https://glufke.net/oracle/search.php?search_id=unanswered

É que seu select está retornando mais de 1 linha.
Pra esses casos, você faz um CURSOR e recebe linha por linha.

Algo assim:

Selecionar tudo

begin
  for vcur in (
    SELECT
       CODSUP 
    FROM TAKB437T_HIER_SAP
    WHERE
       CODFUNC IN(4000951, 4002572)
  )
  loop
    dbms_output.put_line(  vcur.CODSUP );
  end loop;
end;
Responder
  • Informação