Eu tenho que modificar certos pacotes do Oracle. Basicamente, estarei extraindo a funcionalidade e movendo-a para C.
Eles me forneceram alguns scripts de "teste" que eu deveria ser capaz de executar para testar se minhas alterações não quebram a lógica subjacente do pacote. Mas eles não estão funcionando.
Também notei que eles codificaram alguns valores em seus scripts originais e, em vez disso, estou tentando usar variáveis. Eu nunca trabalhei com Oracle, então estou confuso.
No Toad eu tenho um Script nessa linha:
declare
myTestId VARCHAR(32);
begin
select '23423DSSF34SD234' into myTestId from dual;
--Here my drop for my_test_table1 and my_test_table2
drop table my_test_table1;
drop table my_test_table2;
--Here create table my_test_table1 and my_test_table2
--Here I have a bunch of inserts
--Here are some selects statements
end;
No entanto, quando executo o script, ele falha ao atingir as instruções "Drop" e não gosta delas. Como posso executar instruções drop no meu script?
Andei lendo por aí e parece que no Oracle não é uma boa ideia criar tabelas temporárias assim? Qual seria a melhor abordagem?
drop
, junto comcreate
,alter
,truncate
etc é umaDDL
instrução (Linguagem de definição de dados).DDL
não é permitido em blocos PL/SQL. Seu script é um bloco PL/SQL (tembegin
eend
, junto com declarações de variáveis).A maneira de contornar isso é usar
execute immediate
:Esteja ciente de que a execução
DDL
em um bloco PL/SQL dessa maneira executará implicitamente um arquivocommit
. Qualquer erro (comoORA-00942: table or view does not exist
) também interromperá a execução do script, embora haja maneiras de contornar isso. Você pode primeiro consultar oALL_TABLES
dicionário de dados poucos para verificar se a tabela existe antes de tentar descartá-la, por exemplo.O uso de variáveis é um assunto massivo... Se você tiver uma pergunta específica sobre isso, é melhor fazer uma nova pergunta no site.
No que diz respeito à criação de tabelas temporárias, isso é diferente de criar uma tabela temporária verdadeira, como é frequentemente usado em Sybase e SQL Server - não se preocupe, sua abordagem é adequada para scripts de teste.