gpt4 book ai didi

sql - 如何在 oracle sql 脚本中创建过程并在脚本中使用它?

转载 作者:行者123 更新时间:2023-12-03 15:20:14 24 4
gpt4 key购买 nike

我想创建一个 脚本我的 oracle 数据库 , 其中 掉落表 .如果表不存在,脚本不会因为失败而退出,只需打印一个文本:“不存在”。

脚本如下:

BEGIN
EXECUTE IMMEDIATE 'DROP TABLE mytable';
DBMS_Output.Put_Line(' table dropped');
EXCEPTION WHEN OTHERS THEN
IF SQLCODE = -942 THEN
DBMS_Output.Put_Line(' table not exists');
ELSE
DBMS_Output.Put_Line(' Unknown exception while dropping table');
RAISE;
END IF;
END;

我想在一个脚本中删除很多表,而且我不想多次编写这些行。

有什么办法可以把它写到 过程或函数 它获取一个参数(表的名称),并在该脚本中调用此过程?

也许是这样的:
drop_table_procedure('mytableA');
drop_table_procedure('mytableB');

或者可能是一个过程,它得到一个未定义的大小列表(如在 java 中: String ... table names ):
drop_tables_procedure('mytableA','mytableB');

请给我一些例子。
谢谢!

最佳答案

是的,您可以在匿名 PL/SQL 块中声明一个“临时”过程:

DECLARE 

PROCEDURE drop_if_exists(p_tablename VARCHAR)
IS
BEGIN
EXECUTE IMMEDIATE 'DROP TABLE '||p_tablename;
DBMS_Output.Put_Line(' table dropped');
EXCEPTION WHEN OTHERS THEN
IF SQLCODE = -942 THEN
DBMS_Output.Put_Line(' table not exists');
ELSE
DBMS_Output.Put_Line(' Unknown exception while dropping table');
RAISE;
END IF;
END;

BEGIN
drop_if_exists('TABLE_1');
drop_if_exists('TABLE_2');
END;
/

关于sql - 如何在 oracle sql 脚本中创建过程并在脚本中使用它?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33776878/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com