O decode está comentado.

 

De: oracle_br@yahoogrupos.com.br [mailto:oracle_br@yahoogrupos.com.br] Em
nome de Leonardo Silva
Enviada em: Wednesday, 18 de April de 2012 11:18
Para: oracle_br@yahoogrupos.com.br
Assunto: [oracle_br] Erro ao compilar procedure no Oracle

 

  

Pessoal,

Bom dia,

Estou tentando compilar a procedure abaixo, porém está dando erro na linha
do caso, o select executa normalmente, porém ao tentar criar uma procedure
utilizando o mesmo eu tenho o seguinte erro:

Compilation errors for PROCEDURE OPS$STOREP.TESTE_LEO
Error: PLS-00103: Encontrado o simbolo "CASE" quando um dos seguintes
simbolos era esperado:

( - + mod null <an identifier>
<a double-quoted delimited-identifier> <a bind variable> avg
count current max min prior sql stddev sum variance execute
forall time timestamp interval date
<a string literal with character set specification>
<a number> <a single-quoted SQL string>
Line: 22
Text: CASE WHEN C.CUST_TYPE_NO = 73 THEN 'CFI'

Abaixo o código:
Grato pela ajuda.

create or replace procedure teste_leo is
BEGIN
DECLARE
VL_SEQREG NUMBER;
W_DTDIA DATE;
VL_MESANT NUMBER;
VL_CNLOJ NUMBER;
CURSOR C_RM805L21 IS
SELECT ANAREDAD
FROM (
SELECT DISTINCT
TO_CHAR(A.LOJCLI,'009') ||' '||
RPAD(DECODE (A.TPDEV, 1,'AUTORIZACAO DE CREDITO', 2 , 'TROCA
SIMPLES'),22) || ' ' ||
TO_CHAR(A.DTEMIS,'DD/MM/YYYY') || ' ' ||
RPAD(A.USERINC, 15) || ' ' ||
RPAD(UPPER(A.STATUS), 15) || '' ||
RPAD(A.NROSEQ,6)|| '' ||
TO_CHAR(A.VALOR,'99999999999999D99')|| ' ' ||
A.NFISCAL || '-' || A.NFSER ||' '||
--DECODE(
CASE WHEN C.CUST_TYPE_NO = 73 THEN 'CFI'
WHEN LENGTH(D.CACGC) = 14 THEN CASE
WHEN E.NMNFS > 0
AND E.NMCUPFIS = 0 THEN 'EMP'
WHEN E.NMNFS = 0
AND E.NMCUPFIS > 0 THEN 'CFI'
WHEN LENGTH(D.CACGC) = 11 THEN CASE
WHEN E.NMNFS > 0 OR
E.NMCUPFIS > 0 THEN 'CFD'
WHEN LENGTH(D.CACGC) = 11 THEN CASE
WHEN E.NMNFS > 0 OR
E.NMCUPFIS > 0
AND C.CAJURFIS = 'J' THEN 'PJ'

END
END
END
ELSE 'XXX'
END--, 'CFI','MAKRO', 'EMP', 'EMPRESA', 'CFD', 'MAKRO', 'PJ',
'CLIENTE', 'XXX', 'MAKRO')
|| ' ' ||
TO_CHAR(B.DTEMINFS,'DD/MM/YYYY')|| ' ' ||
DECODE(
CASE WHEN C.CUST_TYPE_NO = 73 THEN 'CFI'
WHEN LENGTH(D.CACGC) = 14 THEN CASE
WHEN E.NMNFS > 0
AND E.NMCUPFIS = 0 THEN 'EMP'
WHEN E.NMNFS = 0
AND E.NMCUPFIS > 0 THEN 'CFI'
WHEN LENGTH(D.CACGC) = 11 THEN CASE
WHEN E.NMNFS > 0 OR
E.NMCUPFIS > 0 THEN 'CFD'

END
END
ELSE 'XXX'
END
, 'CFI','INDETERMINADO', 'EMP', 'EMPRESA', 'CFD',
'DETERMINADO', 'XXX', ' ') || ' ' ||
TO_CHAR(A.CUSTCLI ,'0000009') || ' ' ||
B.NMNFS || '-' || B.CNSERNFS || ' ' ||
A.NMCUPFIS ANAREDAD
FROM CUST_DEV_CHANGE A,
CECABNFS B,
ACCLIPRI C,
ACCLISEC D,
HIST_INVOICE E
WHERE A.NMSEQREG = B.NMSEQREG
AND A.CUSTCLI = C.CUST_NO
AND C.CUST_NO = D.CUST_NO
AND D.CUST_NO = E.CUST_NO)
ORDER BY SUBSTR(ANAREDAD,23,2);

----------------------------------------------------------
--PROCEDURE PROC_RM805L21 IS
BEGIN
SELECT TO_NUMBER(TO_CHAR(TRUNC(NVL(B.DTDIA,SYSDATE),'MM')-3,'YYYYMM')),
A.STORE_NO,
NVL(B.DTDIA,SYSDATE)
INTO VL_MESANT,
VL_CNLOJ,
W_DTDIA
FROM STORE A,
GENVAR B;
VL_SEQREG := 0;
FOR REG IN C_RM805L21 LOOP
IF VL_SEQREG = 0 THEN
INSERT INTO RLINFCTL (ANREL,
CNLOJ,
DTGERREL,
SQDETREL,
ANAREDAD)
VALUES ( 'RM805L21',0,TRUNC(W_DTDIA),0,
'LOJA OPERACAO REALIZACAO
RESPONSAVEL STATUS FORMULARIO VALOR NOTA_FISCAL
EMISSOR COMPRA CONSUMIDOR PASSAPORTE NOTA_FISCAL CUPOM_FISCAL'
);
END IF;
VL_SEQREG := VL_SEQREG + 1;
INSERT INTO RLINFCTL( ANREL
, CNLOJ
, DTGERREL
, SQDETREL
, ANAREDAD)
VALUES ( 'RM805L21'
, VL_CNLOJ
, TRUNC(W_DTDIA)
, VL_SEQREG
, REG.ANAREDAD );
END LOOP;
COMMIT;
END;

[As partes desta mensagem que não continham texto foram removidas]





[As partes desta mensagem que não continham texto foram removidas]

Responder a