Oracle - Copiar dados de uma coluna tipo Long para uma tipo varchar2(4000)

6 respostas
J
Bom Dia Pessoal!

Estou utilizando um programa chamado SQuirrel Sql Client para acessar uma base oracle. E Precisava transformar uma coluna do tipo long em varchar2(4000). Fiz um teste com o SQL Tools e funcionou mas no SQuirrel não. Criei uma coluna nova e utilizei a sintaxe abaixo para copiar do dados da coluna A(LONG) para  a Coluna B(VARCHAR2). depois apaguei os dados da A, mudei para VARCHAR2 e copiei os dados da B para a A.

Mas estou com problemas no SQuirrel para realizar esse procedimento:

/<em>Copia os dados da coluna long para a nova coluna varchar2</em>/

BEGIN

for r in (select * from Requisicoes_Texto) loop

update Requisicoes_Texto

set RQC_Comentario_Descricao2 = r.RQC_Comentario_Descricao

where ID_COMPANHIA = r.ID_COMPANHIA  AND

ID_ESTABELECIMENTO_FISCAL = r.ID_ESTABELECIMENTO_FISCAL AND

ID_REQUISICAO = r.ID_REQUISICAO AND

ID_TEXTO = r.ID_TEXTO AND

RQH_RELEASE = r.RQH_RELEASE

;

end loop;

END;

Alguém teria uma sugestão, ou idéia.

Um Grande Abraço
Que Deus os abençoe

6 Respostas

G

Aparentemente não há problema nenhum com seu cursor.

Tenta rodar direto no console do sqlplus

J
O Problema é que  tenho acesso a esse programa. Quando executo o comando abaixo:

/<em>Copia os dados da coluna long para a nova coluna varchar2</em>/

BEGIN

for r in (select * from Requisicoes_Texto) loop

update Requisicoes_Texto

set RQC_Comentario_Descricao2 = r.RQC_Comentario_Descricao

where ID_COMPANHIA = r.ID_COMPANHIA  AND

ID_ESTABELECIMENTO_FISCAL = r.ID_ESTABELECIMENTO_FISCAL AND

ID_REQUISICAO = r.ID_REQUISICAO AND

ID_TEXTO = r.ID_TEXTO AND

RQH_RELEASE = r.RQH_RELEASE;

END LOOP;

END;

ele me da a seguinte mensagem de erro:

Error: ORA-06550: line 9, column 38:
PLS-00103: Encountered the symbol “end-of-file” when expecting one of the following:

;

SQLState: 65000
ErrorCode: 6550
Error occured in:
BEGIN
for r in (select * from Requisicoes_Texto) loop
update Requisicoes_Texto
set RQC_Comentario_Descricao2 = r.RQC_Comentario_Descricao
where ID_COMPANHIA = r.ID_COMPANHIA AND
ID_ESTABELECIMENTO_FISCAL = r.ID_ESTABELECIMENTO_FISCAL AND
ID_REQUISICAO = r.ID_REQUISICAO AND
ID_TEXTO = r.ID_TEXTO AND
RQH_RELEASE = r.RQH_RELEASE

G

Tente fazer isso:

Coloque o seu bloco de código dentro de uma procedure, compile a procedure depois a execute.

Vai ficar mais ou menos assim:

create or replace procedure insere() is
          
BEGIN
    for r in (select * from Requisicoes_Texto) loop
        update Requisicoes_Texto
        set RQC_Comentario_Descricao2 = r.RQC_Comentario_Descricao
        where ID_COMPANHIA = r.ID_COMPANHIA AND
        ID_ESTABELECIMENTO_FISCAL = r.ID_ESTABELECIMENTO_FISCAL AND
        ID_REQUISICAO = r.ID_REQUISICAO AND
        ID_TEXTO = r.ID_TEXTO AND
        RQH_RELEASE = r.RQH_RELEASE;
   END LOOP;
END insere;
J

fera teria com me ajudar por msn?

G

Cara aqui no trampo não tem jeito…

Tenta pelo sqlplus…

Digite no prompt (Dos ou bash) sqlplus usuario@base

será pedida a senha do banco (a mesma usada no SQuirrel)

rode o código da procedure q te passei e depois chame ela assim:

sqlplus>exec insere;

qualquer coisa posta ai…

flw!

J

Cara pelo SQL Plus eu consegui…
Vlw pela ajuda!

Criado 15 de dezembro de 2008
Ultima resposta 15 de dez. de 2008
Respostas 6
Participantes 2