Eu tenho um bloco anônimo PL/SQL que cria uma tabela (usando execute immediate
) e insere dados na tabela.
Quando o bloco compila, ele me dá um erro ORA-00942: table or view does not exist .
Bem, não, ele não existe, mas será criado antes que ocorra a inserção. Se eu criar a tabela antes de compilar, funcionará.
Como posso lidar com isso?
Geralmente, não faz sentido criar tabelas em blocos anônimos e muito menos inserir dados nessas tabelas no mesmo bloco anônimo. Criar novos objetos em tempo de execução é uma má ideia (espero que você não esteja tentando criar uma tabela temporária como faria com outros bancos de dados).
Se você realmente precisar criar uma nova tabela em tempo de execução, poderá inserir dados no mesmo bloco anônimo apenas usando SQL dinâmico para a
INSERT
operação também. Você precisaria usar SQL dinâmico toda vez que referenciasse a tabela recém-criada no mesmo bloco anônimo. Você também pode criar a tabela em um bloco PL/SQL anônimo e inserir os dados em um segundo bloco PL/SQL anônimo. Isso não exigiria que aINSERT
instrução usasse SQL dinâmico.Como parece pelos comentários que você está tentando criar uma tabela temporária como faria em outros bancos de dados, você provavelmente deseja dar uma olhada neste thread StackOverflow que discute alternativas para criar tabelas temporárias no Oracle .