Quase SEMPRE que vc ver mensagens do tipo "Encontrado o simbolo "xxx" quando um dos seguintes simbolos era esperado..." , o que ocorre é que está faltando um Operador/encadeamento PL/SQL : o analisador interno do PL/SQL trabalha por pareamento, ie, ele sabe que todo BEGIN tem que terminar com um END, todo "(" tem que ter um ")" para o 'fechar', todo comando lógico TEM que terminar com um ';' , todo IF com um END IF, coisas do tipo... Assim, se ele encontrou xxx antes do ; ou do ) ou do que seja que ele sabe que precisaria ter , ele vai reclamar do xxx .... No seu caso parece ser algum parêntesis faltando, mas o yahoo!groups desmancha qualquer tipo de formatação, não dá pra analisar na msg, eu Recomendo que vc Idente o seu código, alinhando os parêntesis, os ENDs, etc, que certamente vc acha o que está faltando....
[]s Chiappa --- Em oracle_br@yahoogrupos.com.br, Leonardo Silva <leonardo.drums@...> escreveu > > 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] >