tecnologia | consultoria | banco de dados

Oracle - Procedure para exclusão de tabelas

Em um bloco de PL/SQL, muitas vezes necessitamos excluir uma tabela, mas não sabemos se a mesma existe no banco de dados Oracle. Ao tentar excluir uma tabela inexistente, em um bloco PL/SQL, a execução do bloco será interrompida com o retorno do erro informando que a tabela não existe.

Para evitar esse erro é necessário verificar a existência da tabela no dicionário de dados do Oracle e após isso efetuar o DROP TABLE, como no código abaixo.


CREATE OR REPLACE PROCEDURE PRC_DROP_TABLE
(
p_nm_object IN VARCHAR2
)
AS
v_nm_object VARCHAR2(61);
v_nm_table VARCHAR2(30);
v_nm_owner VARCHAR2(30);
v_table_name VARCHAR2(30); -- varíavel do banco de dados
BEGIN
IF INSTR(p_nm_object, '.', 1,1) = 0 THEN
v_nm_owner := USER;
v_nm_table := UPPER(p_nm_object);
ELSE
v_nm_owner := UPPER(REGEXP_SUBSTR(p_nm_object, '[^.]+',1,1));
v_nm_table := UPPER(REGEXP_SUBSTR(p_nm_object, '[^.]+',1,2));
END IF;

v_nm_object := v_nm_owner||'.'||v_nm_table;
BEGIN

SELECT table_name
INTO v_table_name
FROM all_tables
WHERE owner = v_nm_owner
AND table_name = v_nm_table;

EXECUTE IMMEDIATE('DROP TABLE '|| v_nm_object ||' PURGE');

EXCEPTION
WHEN NO_DATA_FOUND THEN
NULL;
END;

EXCEPTION
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE(SQLERRM);
DBMS_OUTPUT.PUT_LINE(DBMS_UTILITY.FORMAT_ERROR_BACKTRACE);
END PRC_DROP_TABLE;
Data publicação: 00:11 20/04/2015
Perfil
Olá jovem Padawan, seja bem vindo! Este site foi criado com o intuito de compartilhar um pouco de conhecimento de Tecnologia da Informação e Business Intelligence.

Linkedin  Youtube

"O sorriso é o símbolo do vencedor." (Masaaki Hatsumi)


Leandro Sacramento, Todos os direitos reservados - 2012 - 2020