Executar procedure com variavel de retorno oracle - sqldeveloper

8 respostas
oraclesqlprocedure
V

Tenho a seguinte procedure:

Procedure SPGravarFalhaSaida(pCodEvento in varchar, pTipoPortin number,pTipoPrest in number,
pDataInicial in date, pDataFinal in date,pDtAvaliacao in char,
pNroTipoL in number, pDataInicialEve in date, pDataFinalEve in date,pSequenceConflito out number);

Rodando com o comando:
EXEC PGPOBDOFALHASAIDA.SPGravarFalhaSaida('0341', 0, 1, '25/11/2008', '26/11/2008', 'A', '25/11/2008', '26/11/2008', 0);

Recebo o erro:

Alguém pode ajudar?

8 Respostas

G

Cara, vc precisa informar mais um parâmetro ao chamar a função. Para que a função possa retornar o valor

DECLARE
    outputFalhaSaida NUMBER;
BEGIN
    EXEC PGPOBDOFALHASAIDA.SPGravarFalhaSaida('0341', 0, 1, '25/11/2008', '26/11/2008', 'A', '25/11/2008', '26/11/2008', 0, outputFalhaSaida);
END;
V


Ainda assim ele não executa, retornando essa mensagem de erro;

Devo declarar mais algo?

G

Por gentileza, tente dessa forma:

DECLARE
    outputFalhaSaida NUMBER;
BEGIN
    EXEC PGPOBDOFALHASAIDA.SPGravarFalhaSaida('0341', 0, 1, '25/11/2008', '26/11/2008', 'A', '25/11/2008', '26/11/2008', 0, :outputFalhaSaida);
END;

Foi adicionado um REFCURSOR no parâmetro de output.

V

Assim que executo o comando:

DECLARE

outputFalhaSaida NUMBER;

BEGIN

EXEC PGPOBDOFALHASAIDA.SPGravarFalhaSaida(0341, 0, 1, 25/11/2008, 26/11/2008, A, 25/11/2008, 26/11/2008, :outputFalhaSaida);

END;

O sqlDeveloper me mostra a seguinte tela:

image

e o seguinte erro:

Sabe o que pode estar acontecendo?

G

É necessário ter PGPOBDOFALHASAIDA.(...) pq só não EXEC SPGravarFalhaSaida(....) ?

Mexi poucas vezes com DB Oracle, mas acho que isso deveria funcionar…

V

Sim, é necessário, pois é um packege que contem a procedure. Então preciso acessar um e depois com o auxilio do ‘.’ chamar a minha procedure. Mas ainda sem sucesso pra solução :frowning:

G

Faça o seguinte:

DECLARE
    outputFalhaSaida NUMBER;
BEGIN
    PGPOBDOFALHASAIDA.SPGravarFalhaSaida('0341', 0, 1, '25/11/2008', '26/11/2008', 'A', '25/11/2008', '26/11/2008', 0, outputFalhaSaida);
    DBMS_OUTPUT.PUT_LINE(outputFalhaSaida);

END;
V

Encontrei a solução:

VARIABLE outputFalhaSaida NUMBER;
    EXEC PGPOBDOFALHASAIDA.SPGRAVARFALHASAIDA('0215',0,0,'26/11/2008','28/11/2008','A',2000,'30/09/2009','30/09/2020',:PSEQUENCECONFLITO);
    PRINT outputFalhaSaida ;

Não sei o pq, mas a variavel deveria ser declarada dessa maneira acima, e a posição do parametros estavam erradas…

Obrigado pela ajuda.

Criado 20 de março de 2020
Ultima resposta 23 de mar. de 2020
Respostas 8
Participantes 2