problema com tabela temporária com procedure

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
rsalbano
Rank: Analista Júnior
Rank: Analista Júnior
Mensagens: 76
Registrado em: Seg, 11 Jul 2011 9:55 am
Localização: Curitiba

Olá, pessoal.

estou com o seguinte problema:

Eu estou criando a tabela temporária, mas ao compilar a procedure o Oracle informa que a mesma não existe, na linha do insert.

Selecionar tudo

create or replace procedure Carga (arquivo varchar2)
as
  V_LINHA VARCHAR2(8000) := '';
  V_ARQUIVO UTL_FILE.FILE_TYPE;
BEGIN
  EXECUTE IMMEDIATE 'CREATE GLOBAL TEMPORARY TABLE TEMP_TABELA ( VALORES VARCHAR(8000) ) ON COMMIT DELETE ROWS;';
  V_ARQUIVO := UTL_FILE.FOPEN('ARQUIVO', 'ENTRADA.TXT', 'R');
  LOOP
    Begin
      UTL_FILE.GET_LINE(V_ARQUIVO, V_LINHA);
      insert into TEMP_TABELA values (V_LINHA);
     Exception
     when no_data_found then
      UTL_FILE.FCLOSE(V_ARQUIVO);
      exit;
    End;
  END LOOP;
END;  
Como resolver?
arthae
Rank: Programador Sênior
Rank: Programador Sênior
Mensagens: 52
Registrado em: Seg, 09 Mai 2011 1:13 pm
Localização: Porto Alegre - RS
GIVE ME COFFEE AND NO ONE GETS HURT!

Mostra o código da tabela, pode ser nela o problema e não na Procedure.
arthae
Rank: Programador Sênior
Rank: Programador Sênior
Mensagens: 52
Registrado em: Seg, 09 Mai 2011 1:13 pm
Localização: Porto Alegre - RS
GIVE ME COFFEE AND NO ONE GETS HURT!

arthae escreveu:Mostra o código da tabela, pode ser nela o problema e não na Procedure.
Agora que vi o codigo certinho... Que erro ele apresenta?
rsalbano
Rank: Analista Júnior
Rank: Analista Júnior
Mensagens: 76
Registrado em: Seg, 11 Jul 2011 9:55 am
Localização: Curitiba

Na linha: insert into TEMP_TABELA values (V_LINHA);

Apresenta os seguintes erros:
- statement ignored
- table or view does not exist
arthae
Rank: Programador Sênior
Rank: Programador Sênior
Mensagens: 52
Registrado em: Seg, 09 Mai 2011 1:13 pm
Localização: Porto Alegre - RS
GIVE ME COFFEE AND NO ONE GETS HURT!

Olha cara acho que falta um commit para criar a table.
E no insert eu colocaria o campo da table tambem, por exemplo, insert into temp_table(valores) values (blablabla)
rsalbano
Rank: Analista Júnior
Rank: Analista Júnior
Mensagens: 76
Registrado em: Seg, 11 Jul 2011 9:55 am
Localização: Curitiba

Olá,

Coloquei o commit, tanto na procedure (após a criação da tabela), quanto no comando execute immediate.
Também coloquei o nome do campo na linha do insert, como você sugeriu.

Nada, continua com erro na compilação.
rsalbano
Rank: Analista Júnior
Rank: Analista Júnior
Mensagens: 76
Registrado em: Seg, 11 Jul 2011 9:55 am
Localização: Curitiba

Olá,

Consegui, coloquei todos os comandos que utilizam a tabela temporária dentro de execute immediate.
Ex:
o insert: execute immediate ' insert into TEMP_TABELA values (V_LINHA); ';

Valeu.
RafaelFantin
Rank: Estagiário Sênior
Rank: Estagiário Sênior
Mensagens: 9
Registrado em: Qui, 15 Dez 2011 4:01 pm

Olá,

Verifique que o erro está na linha de criação da tabela:

Selecionar tudo

EXECUTE IMMEDIATE 'CREATE GLOBAL TEMPORARY TABLE TEMP_TABELA2 ( VALORES VARCHAR(8000) ) ON COMMIT DELETE ROWS';
Você precisa que a tabela seja criada em tempo de execução ?
veja no tópico http://glufke.net/oracle/viewtopic.php?t=4956
Trevisolli
Moderador
Moderador
Mensagens: 2016
Registrado em: Qua, 12 Jan 2005 3:25 pm
Localização: Araraquara - SP
Abraço,

Trevisolli
OCA Oracle PL/SQL Developer Certified Associate
OCP Oracle Forms Developer Certified Professional
Araraquara-SP

Brother,

Como o Rafael falou, teu erro provavelmente está no ";" dentro da string de criação da tabela.

Uma dica: Você vai rodar esse script mais que uma vez? A criação da tabela na segunda execução causará erro.
Você não pode criar esta tabela no banco, definitivamente (como temp), uma única vez?

Caso não possa, faça uma verificação no teu script, no dicionário de dados, para ver se a tabela já existe e, somente criá-la, caso não exista.
Responder
  • Informação
  • Quem está online

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