sql—删除表(如果存在)的oracle函数

kwvwclae  于 2021-07-26  发布在  Java
关注(0)|答案(2)|浏览(321)

我有以下代码:

BEGIN
    SELECT
        COUNT(*)
    INTO table1_exists
    FROM
        sys.all_tables
    WHERE
        table1_name = upper('table1');

EXCEPTION
    WHEN no_data_found THEN
        table1_exists := 0;
END;

IF ( table1_exists ) = 1 THEN
    EXECUTE IMMEDIATE q'[Drop Table table1]';
END IF;

如果给定一个表名作为输入,我如何创建一个sql函数来删除该表?

xmd2e60i

xmd2e60i1#

只需删除它并抑制“ora-00942:表或视图不存在”错误:

declare
  e_not_exists exception;
  pragma exception_init(e_not_exists, -942);
begin
  execute immediate 'drop table blabla';
exception 
  when e_not_exists then null;
end;
/
dsekswqp

dsekswqp2#

发布完整的程序,遵循萨扬·马拉基诺夫的回答。

CREATE OR REPLACE PROCEDURE drop_ifne (
    table_name IN VARCHAR2
) IS
    e_not_exists EXCEPTION;
    PRAGMA exception_init ( e_not_exists, -942 );
    vstr CLOB;
BEGIN
    vstr := q'[drop table ]' || table_name;
    EXECUTE IMMEDIATE ( vstr );
EXCEPTION
    WHEN e_not_exists THEN
        NULL;
END;

相关问题