Insert no campo CLOB

Dúvidas, dicas e truques de PL/SQL. Aqui também vão assuntos relacionados a pacotes, triggers, funções, Java-Stored Procedures, etc
Responder
cleberz
Rank: Analista Pleno
Rank: Analista Pleno
Mensagens: 107
Registrado em: Ter, 15 Nov 2011 8:42 am

Boa tarde pessoal,
Estou fazendo um insert e tenho um campodo tipo CLOB. O valor a ser inserido é bemmmmmmmmmmm grande, é uma query muito grande e estou fazendo da seguinte maneira abaixo, mas mesmo assim não funcionou:

Selecionar tudo

DECLARE
  TextoGigante CLOB := ' minha query grande com 
quebras
de
linha  ';
BEGIN
  INSERT INTO TEMP VALUES (TextoGigante);
END;

alguém pode me ajudar?
Avatar do usuário
dr_gori
Moderador
Moderador
Mensagens: 5024
Registrado em: Seg, 03 Mai 2004 3:08 pm
Localização: Portland, OR USA
Contato:
Thomas F. G

Você já respondeu a dúvida de alguém hoje?
https://glufke.net/oracle/search.php?search_id=unanswered

Da forma que você passou funciona.
Veja:

Selecionar tudo

SQL> create table thomas( n number, c clob);
Table created
 
SQL>
SQL> declare
  2    t clob :='teste1
  3    teste 2
  4    teste 3';
  5  begin
  6    --insert direto
  7    insert into thomas values (1, 'teste1
  8    teste2
  9    teste3');
10    --
11    --insert com variavel
12    insert into thomas values (2, t );
13    commit;
14  end;
15  /
PL/SQL procedure successfully completed
 
SQL> select * from thomas;
         N C
---------- --------------------------------------------------------------------------------
         1 teste1
             teste2
             teste3
         2 teste1
             teste 2
             teste 3
 
SQL>
Qual é a mensagem de erro que está acontecendo?
Acho que o problema ta sendo a forma que a variável está sendo setada.
Você ta colocando um texto gigante dentro de uma procedure?
cleberz
Rank: Analista Pleno
Rank: Analista Pleno
Mensagens: 107
Registrado em: Ter, 15 Nov 2011 8:42 am

Estou fazendo dentro de um bloco anonimo. procedure não. A query é bastante grande 1735 linhas.
Veja o erro:
Relatório de erros -

Selecionar tudo

ORA-06550: linha 2, coluna 25:
PLS-00172: string literal too long
06550. 00000 -  "line %s, column %s:\n%s"
*Cause:    Usually a PL/SQL compilation error.
*Action:
Avatar do usuário
dr_gori
Moderador
Moderador
Mensagens: 5024
Registrado em: Seg, 03 Mai 2004 3:08 pm
Localização: Portland, OR USA
Contato:
Thomas F. G

Você já respondeu a dúvida de alguém hoje?
https://glufke.net/oracle/search.php?search_id=unanswered

O problema é que você não pode colocar um bloco de texto tão grande dentro de um bloco PLSQL.
Veja este exemplo:

Selecionar tudo

declare 
  t clob;
begin
  t:=   lpad('1', 4000, '1');
  t:=t||lpad('2', 4000, '2');
  t:=t||lpad('3', 4000, '3');
  t:=t||lpad('4', 4000, '4');
  t:=t||lpad('5', 4000, '5');
  t:=t||lpad('6', 4000, '6');
  t:=t||lpad('7', 4000, '7');
  t:=t||lpad('8', 4000, '8');
  t:=t||lpad('9', 4000, '9');              
  t:=t||lpad('0', 4000, '0');
  --insert com variavel
  insert into thomas values (3, t );
  commit;
end;
Veja como ele insreiu 40 mil caracteres:

Selecionar tudo

SQL> select a.*, length(a.c) from thomas a;
         N C                                       LENGTH(A.C)
---------- --------------------------------------- -----------
         1 teste1                                  24
             teste2                                    
             teste3                                    
         2 teste1                                  26
             teste 2                                  
             teste 3                                
         3 111111111111111111111111111111111111111 40000

SQL> 
Em resumo, acredito que você vai ter que quebrar em blocos menores esse seu super texto.
Ou coloca a informação dentro de uma tabela.
É uma idéia.
cleberz
Rank: Analista Pleno
Rank: Analista Pleno
Mensagens: 107
Registrado em: Ter, 15 Nov 2011 8:42 am

Brother, eu partir em blocos, como você falou, e funcionou perfeitamente. Muito obrigado. Quebrei cabeça ontem o dia inteiro. Valeu mesmo! Abraço!
Responder
  • Informação
  • Quem está online

    Usuários navegando neste fórum: Nenhum usuário registrado e 3 visitantes