Eu tenho um script onde estou criando alguns dados de teste. No início do script crio algumas tabelas onde tenho que inserir os dados. Antes de criá-los, verifico se eles não existem.
declare
tableExists number;
begin
SELECT COUNT(*)
INTO tableExists
FROM user_tables
WHERE table_name = 'MY_TEST_TABLE';
if tableExists>0 then
execute immediate 'drop table MY_TEST_TABLE';
end if;
SELECT COUNT(*)
INTO tableExists
FROM user_tables
WHERE table_name = 'MY_TEST_TABLE2';
if tableExists>0 then
execute immediate 'drop table MY_TEST_TABLE2';
end if;
--Here I create both tables: MY_TEST_TABLE and MY_TEST_TABLE2
Minha pergunta é: Existe uma maneira de evitar a repetição do código para verificar se a tabela existe? Existe uma maneira de chamar esse código como um método passando o nome da tabela como parâmetro?
Acredito que poderia criar/declarar uma função e depois usar isso. Mas esse tipo de função não é temporal. Eu sei que isso não é como C ou C++. Mas eu queria saber se havia uma maneira de eu ter uma espécie de "método privado" para este script testar a existência de minhas tabelas e dessa forma eu não precisaria repetir o código, mas o método não permaneceria depois meu roteiro foi concluído.
Qual é a maneira correta, se houver, de conseguir o que eu quero?
Você sempre pode aninhar blocos em PL/SQL
você pode colocar sua tabela em uma tabela temporária ou em uma tabela de varchar2. ex:
Instanciação:
..
código: