- Este tópico contém 9 respostas, 3 vozes e foi atualizado pela última vez 15 anos, 11 meses atrás por vitorpatriarcha.
-
AutorPosts
-
21 de janeiro de 2009 às 9:42 pm #84868raphaacParticipante
Alguem, por favor, poderia me ajudar a descobrir porque o pl/sql reclama do CASE dentro da procedure, sendo que quando efetuo o teste como sql simplesmente, ele funciona, mas quando o coloco em procedure, o mesmo não aceita, onde esta o erro?
PROCEDURE SP_CODIGO_EXEM_STATUS(P_PROD_CD_SQUENCIAL IN NUMBER,
CRESULT OUT C_CURSOR) ASBEGIN
OPEN CRESULT FORSELECT C.CODI_CD_SQUENCIAL as ID,
C.CODI_CD_INTERNO as “CODIGO INTERNO”,
CASE WHEN
(SELECT COUNT(*)
FROM TBT_EVENTO E
WHERE E.CODI_CD_SQUENCIAL(+) = C.CODI_CD_SQUENCIAL AND
E.EVEN_DT_REALDEVOLUCAO IS NULL) > 0 THEN
‘Emprestado’
ELSE
‘Acervo’
END AS STATUS
FROM TBT_CODIGO C
WHERE C.PROD_CD_SQUENCIAL = P_PROD_CD_SQUENCIALEND;
Erro::::
Compilation errors for PACKAGE BODY TBTADM.PKBT_CODIGO
Error: PLS-00103: Encountered the symbol “CASE” when expecting one of the following:
( – + mod null
table avg count current max min prior sql stddev sum variance
execute the forall time timestamp interval date
Line: 114
Text: CASE WHEN21 de janeiro de 2009 às 10:33 pm #84869Leonardo LitzParticipanteOlá
raphaacNão é possível capturar um retorno de uma query em um case ou if.
Você pode utilizar um decode:SELECT C.CODI_CD_SQUENCIAL as ID,
C.CODI_CD_INTERNO as “CODIGO INTERNO”,
decode((SELECT COUNT(*)
FROM TBT_EVENTO E
WHERE E.CODI_CD_SQUENCIAL(+) = C.CODI_CD_SQUENCIAL
AND E.EVEN_DT_REALDEVOLUCAO IS NULL),0,’Acervo’,’Emprestado’) AS STATUS
FROM TBT_CODIGO C
WHERE C.PROD_CD_SQUENCIAL = P_PROD_CD_SQUENCIALVlw Leonardo Litz
21 de janeiro de 2009 às 11:04 pm #84870raphaacParticipanteObrigado Leonardo, mas eu já havia testado asim, e o erro foi o seguinte:
Compilation errors for PACKAGE BODY TBTADM.PKBT_CODIGO
Error: PLS-00103: Encountered the symbol “SELECT” when expecting one of the following:
( - + mod not null others <a> <a> avg count current exists max min prior sql stddev sum variance execute forall time timestamp interval date <a> <a> <a>
Line: 115
Muito Obrigado
[quote=”Litz”:2ixiiu90]Olá
raphaacNão é possível capturar um retorno de uma query em um case ou if.
Você pode utilizar um decode:SELECT C.CODI_CD_SQUENCIAL as ID,
C.CODI_CD_INTERNO as “CODIGO INTERNO”,
decode((SELECT COUNT(*)
FROM TBT_EVENTO E
WHERE E.CODI_CD_SQUENCIAL(+) = C.CODI_CD_SQUENCIAL
AND E.EVEN_DT_REALDEVOLUCAO IS NULL),0,’Acervo’,’Emprestado’) AS STATUS
FROM TBT_CODIGO C
WHERE C.PROD_CD_SQUENCIAL = P_PROD_CD_SQUENCIALVlw Leonardo Litz[/quote]
21 de janeiro de 2009 às 11:14 pm #84871Leonardo LitzParticipanteCara tem como vc postar a procedure inteira ai?
22 de janeiro de 2009 às 12:27 am #84873raphaacParticipantePROCEDURE SP_CODIGO_EXEM_STATUS(P_PROD_CD_SQUENCIAL IN NUMBER,
CRESULT OUT C_CURSOR) ASBEGIN
OPEN CRESULT FORSELECT C.CODI_CD_SQUENCIAL as ID, C.CODI_CD_INTERNO as "CODIGO INTERNO", DECODE((SELECT COUNT(*) FROM TBT_EVENTO E WHERE E.CODI_CD_SQUENCIAL(+) = C.CODI_CD_SQUENCIAL AND E.EVEN_DT_REALDEVOLUCAO IS NULL),'0','Acervo','Emprestado') AS STATUS FROM TBT_CODIGO C WHERE C.PROD_CD_SQUENCIAL = P_PROD_CD_SQUENCIAL;
END;
Obrigado.
[quote=”Litz”:3op84aqu]Cara tem como vc postar a procedure inteira ai?[/quote]
22 de janeiro de 2009 às 2:38 pm #84875Leonardo LitzParticipanteTenta assim
PROCEDURE SP_CODIGO_EXEM_STATUS(P_PROD_CD_SQUENCIAL IN NUMBER,
CRESULT OUT C_CURSOR) ASBEGIN
OPEN CRESULT FORSELECT C.CODI_CD_SQUENCIAL as ID,
C.CODI_CD_INTERNO as “CODIGO INTERNO”,
DECODE((SELECT COUNT(*) FROM TBT_EVENTO E WHERE E.CODI_CD_SQUENCIAL(+) = C.CODI_CD_SQUENCIAL AND
E.EVEN_DT_REALDEVOLUCAO IS NULL),’0′,’Acervo’,’Emprestado’)
AS STATUS
FROM TBT_CODIGO C
WHERE C.PROD_CD_SQUENCIAL = P_PROD_CD_SQUENCIAL;END;
END SP_CODIGO_EXEM_STATUS;
22 de janeiro de 2009 às 7:34 pm #84881raphaacParticipanteContinua com o mesmo erro.
Compilation errors for PROCEDURE TBTADM.SP_CODIGO_EXEM_STATUS
Error: PLS-00103: Encountered the symbol “SELECT” when expecting one of the following:
( - + mod not null others <a> <a> avg count current exists max min prior sql stddev sum variance execute forall time timestamp interval date <a> <a> <a>
[quote=”Litz”:3d2eqt2e]Tenta assim
PROCEDURE SP_CODIGO_EXEM_STATUS(P_PROD_CD_SQUENCIAL IN NUMBER,
CRESULT OUT C_CURSOR) ASBEGIN
OPEN CRESULT FORSELECT C.CODI_CD_SQUENCIAL as ID,
C.CODI_CD_INTERNO as “CODIGO INTERNO”,
DECODE((SELECT COUNT(*) FROM TBT_EVENTO E WHERE E.CODI_CD_SQUENCIAL(+) = C.CODI_CD_SQUENCIAL AND
E.EVEN_DT_REALDEVOLUCAO IS NULL),’0′,’Acervo’,’Emprestado’)
AS STATUS
FROM TBT_CODIGO C
WHERE C.PROD_CD_SQUENCIAL = P_PROD_CD_SQUENCIAL;END;
END SP_CODIGO_EXEM_STATUS;[/quote]
22 de janeiro de 2009 às 7:36 pm #84882raphaacParticipante[quote=”raphaac”:27a8r9kl]Continua com o mesmo erro.
Ele esta reclamando do segundo select, ou seja, do SELECT COUNT(*)…
Compilation errors for PROCEDURE TBTADM.SP_CODIGO_EXEM_STATUS
Error: PLS-00103: Encountered the symbol “SELECT” when expecting one of the following:
( - + mod not null others <a> <a> avg count current exists max min prior sql stddev sum variance execute forall time timestamp interval date <a> <a> <a>
[quote=”Litz”:27a8r9kl]Tenta assim
PROCEDURE SP_CODIGO_EXEM_STATUS(P_PROD_CD_SQUENCIAL IN NUMBER,
CRESULT OUT C_CURSOR) ASBEGIN
OPEN CRESULT FORSELECT C.CODI_CD_SQUENCIAL as ID,
C.CODI_CD_INTERNO as “CODIGO INTERNO”,
DECODE((SELECT COUNT(*) FROM TBT_EVENTO E WHERE E.CODI_CD_SQUENCIAL(+) = C.CODI_CD_SQUENCIAL AND
E.EVEN_DT_REALDEVOLUCAO IS NULL),’0′,’Acervo’,’Emprestado’)
AS STATUS
FROM TBT_CODIGO C
WHERE C.PROD_CD_SQUENCIAL = P_PROD_CD_SQUENCIAL;END;
END SP_CODIGO_EXEM_STATUS;[/quote][/quote]
22 de janeiro de 2009 às 8:17 pm #84883Leonardo LitzParticipanteTenta executar esta query apenas no sqlplus.
27 de janeiro de 2009 às 11:41 pm #84938vitorpatriarchaParticipanteAmigo.. Nao estou conseguindo enviar uma solucao para voce aki pelo topico..
Nem consigo te enviar MP.Entra em contato vitorpatriarcha@gmail.com caso ainda nao tenha conseguido!
-
AutorPosts
- Você deve fazer login para responder a este tópico.