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