0

次のような手順を作成しました

CREATE OR REPLACE PROCEDURE drop_if_exists (table_name IN varchar2)
IS
BEGIN
        EXECUTE IMMEDIATE 'DROP TABLE table_name';
EXCEPTION
      WHEN OTHERS THEN
         IF SQLCODE != -942 THEN
             RAISE;
         END IF;
END;

drop_if_exists ( 'my_table' ) として実行すると、すべてが正常に実行されたと表示されますが、 my_table というテーブルは、プロシージャの呼び出し後も存在します。大文字に変更しても違いはありません。変数は単に代入されていないと思います...修正方法についてのアイデアはありますか?

4

3 に答える 3

7

「table_name」という名前のテーブルを削除しています。これは、パラメーターで渡したテーブルを削除するのとは異なります。

これを試して:

EXECUTE IMMEDIATE 'DROP TABLE ' || table_name ;

とにかく、私はそれをすることをお勧めしません。あなたのコードは潜在的に危険です。

于 2012-09-03T15:28:17.567 に答える
3
EXECUTE IMMEDIATE 'DROP TABLE ' ||table_name;
于 2012-09-03T15:28:02.917 に答える
0

あなたがしていることは実際には間違っています。次のようにする必要があります。

EXECUTE IMMEDIATE 'DROP TABLE' || テーブル名; ここで、 table_name は、例で試しているように、文字列ではなくテーブルの名前を含むパラメーターです

于 2012-09-04T06:32:08.437 に答える