处理异常 oracle 创建 table
Handling exceptions oracle creating table
我想知道如果我在过程中创建 table 时遇到错误,是否可以通过某种方式处理异常。
IF testes=0 then
stmt:= 'create table ' || prefix || SII_BCK_TAB_ID_SEQ.nextval || ' AS SELECT * FROM '|| n_tab || ' WHERE 1=0';
EXECUTE IMMEDIATE stmt;
我可以在执行语句后创建异常吗?创建 table 时处理错误的最佳流程是什么?还是和处理dml语句一样?
我可以插入保存点之类的东西吗?
谢谢
如果我是你,我会创建一个单独的过程来处理 table 创建,然后有一个例外条款。这使得它成为模块化代码;易于单元测试等
例如:程序看起来像这样:
PROCEDURE create_table (in_new_table_name in varchar2,
in_old_table_name in varchar2)
is
E_TAB_EXISTS EXCEPTION;
PRAGMA EXCEPTION_INIT(E_TAB_EXISTS,-955);
BEGIN
execute immediate 'create table ' || in_new_table_name || ' AS SELECT * FROM '|| in_old_table_name || ' WHERE 1=0';
EXCEPTION
WHEN E_TAB_EXISTS THEN
NULL;
END create_table;
你会这样称呼它:
If testes = 0 then
create_table(in_new_table_name => prefix || sii_bck_tab_id_seq.nextval,
in_old_table_name => n_tab);
...
end if;
理想情况下,您在包中创建代码,并且可以简单地将新过程作为包中的单独过程。
我想知道如果我在过程中创建 table 时遇到错误,是否可以通过某种方式处理异常。
IF testes=0 then
stmt:= 'create table ' || prefix || SII_BCK_TAB_ID_SEQ.nextval || ' AS SELECT * FROM '|| n_tab || ' WHERE 1=0';
EXECUTE IMMEDIATE stmt;
我可以在执行语句后创建异常吗?创建 table 时处理错误的最佳流程是什么?还是和处理dml语句一样?
我可以插入保存点之类的东西吗? 谢谢
如果我是你,我会创建一个单独的过程来处理 table 创建,然后有一个例外条款。这使得它成为模块化代码;易于单元测试等
例如:程序看起来像这样:
PROCEDURE create_table (in_new_table_name in varchar2,
in_old_table_name in varchar2)
is
E_TAB_EXISTS EXCEPTION;
PRAGMA EXCEPTION_INIT(E_TAB_EXISTS,-955);
BEGIN
execute immediate 'create table ' || in_new_table_name || ' AS SELECT * FROM '|| in_old_table_name || ' WHERE 1=0';
EXCEPTION
WHEN E_TAB_EXISTS THEN
NULL;
END create_table;
你会这样称呼它:
If testes = 0 then
create_table(in_new_table_name => prefix || sii_bck_tab_id_seq.nextval,
in_old_table_name => n_tab);
...
end if;
理想情况下,您在包中创建代码,并且可以简单地将新过程作为包中的单独过程。