动态异常中的异常
Exception in Dynamic exception
我已经给出了一个情况。如果 table 存在,我们必须在程序中删除 table。如果它不存在,我们必须创建 table.
所以我们会写
execute immediate 'Drop table emp';
如果 emp table 不存在,那么上面的语句应该给出异常,然后我们将创建 emp
table,我们如何在不检查 [=12= 的情况下做到这一点] 或 all_tables
我想你可以用这样的方式:
begin
execute immediate 'Drop table emp';
exception when others then
begin
if ( sqlcode = -942 ) then
execute immediate 'Create table emp(id int,name varchar2(50),surname varchar2(50))';
end if;
end;
end;
当 运行 存在时丢弃 table,如果不存在则丢弃 table。
我们有一些特定于错误代码的异常名称,而不是使用通用名称 OTHERS
,从关键字 sqlcode
返回,例如:
ZERO_DIVIDE(-1476)
、TOO_MANY_ROWS(-1422)
、VALUE_ERROR(-6502)
、INVALID_NUMBER(-1722)
..等
这是作业吗?
如果不是,那么这将是一个相当糟糕的设计。您不应该动态创建 table,最好截断数据。
如果是,那么具有异常名称的解决方案就是这个:
DECLARE
TABLE_DOES_NOT_EXIST EXCEPTION;
PRAGMA EXCEPTION_INIT(TABLE_DOES_NOT_EXIST, -942);
begin
execute immediate 'Drop table emp';
exception
when TABLE_DOES_NOT_EXIST then
execute immediate 'Create table emp(id int,name varchar2(50),surname varchar2(50))';
end;
我已经给出了一个情况。如果 table 存在,我们必须在程序中删除 table。如果它不存在,我们必须创建 table.
所以我们会写
execute immediate 'Drop table emp';
如果 emp table 不存在,那么上面的语句应该给出异常,然后我们将创建 emp
table,我们如何在不检查 [=12= 的情况下做到这一点] 或 all_tables
我想你可以用这样的方式:
begin
execute immediate 'Drop table emp';
exception when others then
begin
if ( sqlcode = -942 ) then
execute immediate 'Create table emp(id int,name varchar2(50),surname varchar2(50))';
end if;
end;
end;
当 运行 存在时丢弃 table,如果不存在则丢弃 table。
我们有一些特定于错误代码的异常名称,而不是使用通用名称 OTHERS
,从关键字 sqlcode
返回,例如:
ZERO_DIVIDE(-1476)
、TOO_MANY_ROWS(-1422)
、VALUE_ERROR(-6502)
、INVALID_NUMBER(-1722)
..等
这是作业吗?
如果不是,那么这将是一个相当糟糕的设计。您不应该动态创建 table,最好截断数据。
如果是,那么具有异常名称的解决方案就是这个:
DECLARE
TABLE_DOES_NOT_EXIST EXCEPTION;
PRAGMA EXCEPTION_INIT(TABLE_DOES_NOT_EXIST, -942);
begin
execute immediate 'Drop table emp';
exception
when TABLE_DOES_NOT_EXIST then
execute immediate 'Create table emp(id int,name varchar2(50),surname varchar2(50))';
end;