Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Rafael de oliveira

dados temporários.

Recommended Posts

Bom dia,

 

Tenho um for que percorre um XML. Dentro desse for acesso uma procedure que faz a rotina dela e retorna uma mensagem que pode ser "sucesso" ou "inconsistência". A inconsistência pode ser várias mensagens já criadas na procedure.

 

Se o retorno for uma inconsistência, eu preciso adicionar isso em alguma lista, tabela temporária ou qualquer coisa com as seguintes informações.

 

- ID, Número e Mensagem.

 

Cada vez que passar por esse for e receber um inconsistência vou ir adicionando nessa "lista" vamos chamar assim.

 

Após o termino do for eu vou retornar um cursor com tudo que estiver dentro dessa lista.

 

Isso é o que tenho que fazer.

 

**Agora vamos ao que venho solicitar ajuda de vocês.

 

Tentei criar uma tabela temporária para fazer isso, porém não deu certo, pois ele não encontra a mesma na hora de inserir e na hora de selecionar para adicionar no cursor.

 

O que poderia usar para fazer isso que preciso? Se tiverem algum exemplo ajuda mais ainda.

 

Obrigado a todos!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Como criou a temporária ?

 

"Commitou" os dados ?

 

Pesquise na documentação Oracle sobre Global Temporary Tables.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Criei a tabela assim:

CREATE GLOBAL TEMPORARY TABLE TEMP_MSGS(ID_SEQ_LACRE LONG,
                                        ENV_NUMERO VARCHAR2(500),
                                        MENSAGEM VARCHAR2(1000)) ON COMMIT DELETE ROWS;
Inseri nela assim:
INSERT INTO TEMP_MSGS
          (ID_SEQ_LACRE, ENV_NUMERO, MENSAGEM)
        VALUES
          (LACRES.ID_SEQ_LACRE, LACRES.ENV_NUMERO, RESULT_ERROR);
Selecionei os dados dela para inserir no cursor assim:
OPEN V_CURSOR FOR
    SELECT * FROM TEMP_MSGS;

A criação da tabela é feita após o BEGIN e antes de entrar no LOOP do FOR.

 

O erro que apresenta ao commitar a procedure é o seguinte:

 

PLS-00103: Encontrado o símbolo "CREATE" quando um dos seguintes símbolos era esperado.

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tentei criar dessa forma:

BEGIN
      EXECUTE IMMEDIATE 'CREATE GLOBAL TEMPORARY TABLE TEMP_MSGS(ID_SEQ_LACRE LONG,
                                            ENV_NUMERO VARCHAR2(500),
                                            MENSAGEM VARCHAR2(1000)) ON COMMIT DELETE ROWS';
 END;

Porém na hora que chamo o Insert dentro do FOR e compilo me da o erro de que a tabela não existe.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Creio que o erro está na cláusula on commit delete rows , teria de rever a documentação para ter certeza.

 

Mas uma tabela normal do tipo "sanfona" , resolve o problema

 

Uma procedure insere os dados necessários e usa um idenficador qualquer , grava uma data da operacão também

 

Outras aplicações leem desta tabela usando o identificador

 

Um Schedulle ou Job delete os dados mais antigos que uma determinada data , digamos hoje menos dois dias , este job roda todo dia às 00:00h

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.