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;
。がここにある理由がわかりません。構文ですか?
手順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
したがって、トラップする2つのエラー:
エラーが 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
-最初の一時テーブルの切り捨て SQL> TRUNCATE TABLE test_temp1; -その後、一時テーブルの削除 SQL> DROP TABLE test_temp1;
PuTTY
cd $ADMIN_SCRIPTS_HOME
./adstpall.sh
を実行してApacheサーバーを停止しますdrop table t;
これはうまくいきます。