处理异常oracle创建表

Posted

技术标签:

【中文标题】处理异常oracle创建表【英文标题】:Handling exceptions oracle creating table 【发布时间】:2018-11-09 15:26:56 【问题描述】:

我想知道如果在过程中创建表时出现错误,我是否可以通过某种方式处理异常。

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;

我可以在执行语句后创建异常吗?创建表时处理错误的最佳过程是什么?还是和处理dml语句一样?

我可以插入保存点之类的东西吗? 谢谢

【问题讨论】:

您处理execute immediate 的异常。基本陈述是什么并不重要。异常处理代码将在 PL/SQL 中处理。 好的,谢谢你的澄清 @GordonLinoff 如果语句失败,我还能正常使用保存点吗? 【参考方案1】:

如果我是你,我会创建一个单独的过程来处理表的创建,然后有一个异常子句。然后,这使其成为模块化代码;易于单元测试等。

例如:程序看起来像:

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;

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

【讨论】:

这就是我正在做的事情,它是我正在创建的工作的一部分,所以我可以为我的创建表创建一个新过程。谢谢

以上是关于处理异常oracle创建表的主要内容,如果未能解决你的问题,请参考以下文章

如果 Oracle 中不存在表,则创建一个表(使用 Java)

oracle总结

Oracle表空间不足处理

“创建后”触发器中的未处理异常阻止创建

在重新创建表空间的时候出现:ora-01119 和 ora-27038 错误。

用友nc5.7 linux 中oracle创建表空间问题