Tire o Ponto e Virgula no final da instrução .

Ao inves disso

GROUP BY c.qdra_id, i.imov_idcategoriaprincipal  );');

Faça
GROUP BY c.qdra_id, i.imov_idcategoriaprincipal  )');
 
Alessandro Lúcio Cordeiro da Silva 
        Analista de Sistema
þ http://alecordeirosilva.blogspot.com/
O tic-tac do relógio me lembra de algo muito importante que esta acontecendo: 
estamos vivos.
                                "Joana de Souza Schmitz Croxato"
 


________________________________
 De: raffaell.ti77 <raffaell.t...@yahoo.com>
Para: oracle_br@yahoogrupos.com.br 
Enviadas: Quinta-feira, 12 de Julho de 2012 8:10
Assunto: [oracle_br] execute immediate
 

  
Pessoal, bom tarde.

Estou tendo um problema com um execute immediate dentro um SP.
EU tenho um create table que executando apenas ela por fora, ela é criada sem 
problema algum, mas quando coloco dentro do execute immediate me dá um erro na 
hora de executar a procedure. Segue o exemplo:

CREATE OR REPLACE PROCEDURE teste_immediate IS
BEGIN
EXECUTE IMMEDIATE('CREATE TABLE QUADRA_TEMP AS (select c.qdra_id qdra_id, 
i.imov_idcategoriaprincipal catg_id, count(distinct c.imov_id) quantidade
from faturamento.conta c
inner join cadastro.imovel i
on i.imov_id = c.imov_id
inner join cadastro.sistema_parametros sp
on 1=1
where((c.cnta_amreferenciacontabil <=
(CASE WHEN (substr(to_char(sp.parm_amreferenciafaturamento), 5, 2) = ''01'') 
THEN
to_number((to_char((to_number(substr(to_char(sp.parm_amreferenciafaturamento), 
1, 4)) - 1)) || ''12''))
ELSE sp.parm_amreferenciafaturamento - 1 END)
and c.dcst_idatual in ( 0,1,2) )
or ( c.cnta_amreferenciacontabil >
(CASE WHEN (substr(to_char(sp.parm_amreferenciafaturamento), 5, 2) = ''01'') 
THEN 
to_number((to_char((to_number(substr(to_char(sp.parm_amreferenciafaturamento), 
1, 4)) - 1)) || ''12''))
ELSE sp.parm_amreferenciafaturamento - 1 END) and c.dcst_idatual in (3,4,5,8) )
and ( c.dcst_idanterior is null
or ( c.cnta_amreferenciaconta <= (CASE WHEN 
(substr(to_char(sp.parm_amreferenciafaturamento), 5, 2) = ''01'') THEN 
to_number((to_char((to_number(substr(to_char(sp.parm_amreferenciafaturamento), 
1, 4)) - 1)) || ''12''))  ELSE sp.parm_amreferenciafaturamento - 1 END) and 
c.dcst_idanterior not in (1,2) )))
GROUP BY c.qdra_id, i.imov_idcategoriaprincipal  );');

END;

O erro gerado é o seguinte:

ORA-00911: caractere inválido
ORA-06512: em "TESTE_IMMEDIATE", line 3
ORA-06512: em line 2

Eu acho que o problema está no caracter com duas aspas simples, exemplo: ''12''.

Como faço para resolver esse probleminha, alguém tem uma sugestão?


 

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

Responder a