处理异常 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;

理想情况下,您在包中创建代码,并且可以简单地将新过程作为包中的单独过程。