3

昨日のテーブルをコピーし、昨日のテーブルを削除し、新しいテーブルを作成し、変更を比較するために一晩実行するようにスケジュールするスクリプトを作成しました。これはスケジュールされたタスクとしてうまく機能していますが、ユーザーがテスト目的でその場で実行できるようにする方法を見つけるのに本当に苦労しています.

私が本当にやりたいことは、すべてをストアド プロシージャにパックすることです。これは、ユーザー (非常に非技術的) がクリックするだけでプロシージャを簡単に実行できるようにする eForm ツールがあるためです。

スクリプトの開始例を次に示します。DROP TABLEのようなコマンドを標準として受け入れないことは明らかなので、これをストアドプロシージャに押し込むのを手伝ってくれる人はいますか。

ありがとう。

DROP TABLE SQL2005TEST.ABSENCEFULLDATADIFF_YESTERDAY;
DROP TABLE SQL2005TEST.ABSENCELATESTSTART_YESTERDAY;
DROP TABLE SQL2005TEST.ABSENCELATESTEND_YESTERDAY;

CREATE TABLE SQL2005TEST.ABSENCEFULLDATADIFF_YESTERDAY
 AS SELECT * FROM SQL2005TEST.ABSENCEFULLDATADIFF;

CREATE TABLE SQL2005TEST.ABSENCELATESTSTART_YESTERDAY
 AS SELECT * FROM SQL2005TEST.ABSENCELATESTSTART;

CREATE TABLE SQL2005TEST.ABSENCELATESTEND_YESTERDAY
 AS SELECT * FROM SQL2005TEST.ABSENCELATESTEND;
4

1 に答える 1

8
CREATE OR REPLACE PROCEDURE proc_name AS
BEGIN
EXECUTE IMMEDIATE 'DROP TABLE SQL2005TEST.ABSENCEFULLDATADIFF_YESTERDAY';
.....
EXECUTE IMMEDIATE 'CREATE TABLE SQL2005TEST.ABSENCELATESTEND_YESTERDAY
                       AS SELECT * FROM SQL2005TEST.ABSENCELATESTEND';
....
....
EXCEPTION
  ....
  ....
END;

このEXECUTE IMMEDIATEステートメントは、PL/SQL ブロック、ストアド プロシージャ、またはパッケージ内で動的 SQL ステートメントまたは無名 PL/SQL ブロックを実行します。DROPこれは、などの DDL ステートメントを実行する必要がある場合に、より具体的に使用されCREATE TABLEます。PL/SQL から DDL コマンドを DML ステートメントとして実行することはできないため、唯一の方法は動的 SQL です。詳細はこちらこちら

于 2012-10-09T13:48:51.673 に答える