2个单独的问题。
我正在使用此脚本删除表[求助]
BEGIN
EXECUTE IMMEDIATE 'DROP TABLE_NAME';
DBMS_OUTPUT.PUT_LINE ('Global table TABLE_NAME Dropped');
EXCEPTION
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE ('Global table TABLE_NAME Doesn''t exist.');
END;
/
无论如何,如果表“不存在”或者在某些其他会话中使用它(在这种情况下它将被锁定且无法删除),我可以区分。我不确定我是否可以在user_tables中看到该表存在。我不完全了解权限。
我现在已添加此代码
WHEN OTHERS THEN
i_code := SQLCODE;
v_errm := SUBSTR(SQLERRM, 1, 64);
if i_code = -942 THEN
DBMS_OUTPUT.PUT_LINE ('TABLE_NAME doesn''t exist. Script will continue to create it');
ELSE
DBMS_OUTPUT.PUT_LINE ('Error dropping temporary table. The error code is ' || i_code || '- ' || v_errm);
END IF ;
2。我在每个程序结束时看到。,如下所示
END PROCEDURE_NAME;
.
/
sho err;
我只是不明白为什么。就在这里。是语法还是什么?
答案 0 :(得分:15)
-- First Truncate temporary table SQL> TRUNCATE TABLE test_temp1; -- Then Drop temporary table SQL> DROP TABLE test_temp1;
答案 1 :(得分:13)
步骤1.找出要捕获的错误:
如果该表不存在:
SQL> drop table x;
drop table x
*
ERROR at line 1:
ORA-00942: table or view does not exist
如果正在使用该表:
SQL> create global temporary table t (data varchar2(4000));
Table created.
在另一个会话中使用该表。 (注意插入后没有提交或任何内容。)
SQL> insert into t values ('whatever');
1 row created.
回到第一个会话,尝试删除:
SQL> drop table t;
drop table t
*
ERROR at line 1:
ORA-14452: attempt to create, alter or drop an index on temporary table already in use
所以陷阱的两个错误:
查看错误是否为predefined。他们不是。所以他们需要这样定义:
create or replace procedure p as
table_or_view_not_exist exception;
pragma exception_init(table_or_view_not_exist, -942);
attempted_ddl_on_in_use_GTT exception;
pragma exception_init(attempted_ddl_on_in_use_GTT, -14452);
begin
execute immediate 'drop table t';
exception
when table_or_view_not_exist then
dbms_output.put_line('Table t did not exist at time of drop. Continuing....');
when attempted_ddl_on_in_use_GTT then
dbms_output.put_line('Help!!!! Someone is keeping from doing my job!');
dbms_output.put_line('Please rescue me');
raise;
end p;
结果,首先没有t
:
SQL> drop table t;
Table dropped.
SQL> exec p;
Table t did not exist at time of drop. Continuing....
PL/SQL procedure successfully completed.
现在,使用t
:
SQL> create global temporary table t (data varchar2(4000));
Table created.
在另一场会议中:
SQL> insert into t values (null);
1 row created.
然后在第一次会议中:
SQL> exec p;
Help!!!! Someone is keeping from doing my job!
Please rescue me
BEGIN p; END;
*
ERROR at line 1:
ORA-14452: attempt to create, alter or drop an index on temporary table already in use
ORA-06512: at "SCHEMA_NAME.P", line 16
ORA-06512: at line 1
答案 2 :(得分:0)
putty
下方运行,关闭apache服务器
cd $ADMIN_SCRIPTS_HOME
./adstpall.sh
drop table t;
这将锻炼..
答案 3 :(得分:-1)
是的 - 引擎会针对不同的条件抛出不同的异常。
您将更改此部分以捕获异常并执行不同的操作
EXCEPTION
WHEN OTHERS THEN
这是一个参考
http://download.oracle.com/docs/cd/B10501_01/appdev.920/a96624/07_errs.htm
答案 4 :(得分:-1)
DECLARE GLOBAL TEMPORARY TABLE语句为当前连接定义临时表。
这些表不驻留在系统目录中,并且不是持久性的。
临时表仅在声明它们的连接期间存在,并且不能在该连接之外引用。
当连接关闭时,将删除表的行,并删除临时表的内存中描述。
供参考http://docs.oracle.com/javadb/10.6.2.1/ref/rrefdeclaretemptable.html