0

他のテーブルの関連データを含むデータベース エントリのクローンを作成し、それに新しい ID を割り当てるコードを作成する必要があります。簡略化すると、IDのキーを持つMAINテーブルと、IDのFKを持つSUB1とMAINの各エントリの複数のレコードを持つサブテーブルがあります。
MAIN の特定の ID のデータを新しいレコードにコピーし、ID を新しい値に更新して、既存のエントリを時間内のスナップショットとして残し、新しいエントリを新しい進行中の作業にできるようにしたいと考えています。

私はストアド プロシージャを使用しようとしていますが、作業を実行するために他の SP を呼び出す高レベルの SP を持つことが可能/推奨されるかどうか疑問に思っていますか?

例えば


    CREATE PROCEDURE CopyNewVersion (IN oldID)
    ...
    BEGIN
    --copy main record details for passed in oldID, 
    --return the new ID thats been allocated
      CALL CopyNewMainRecord(IN oldID, OUT newID )
    --copy all SUB1 records for oldID to newID
      CALL CopyNewSub1Records(IN oldID, IN newID)
    --Declare a cursor to return the details in MAIN for newID
    END

私は CopyNewSub1Records を次のように見ています


    CREATE PROCEDURE CopyNewSub1Records (IN oldID, IN NewID)
    ...
    BEGIN
      --select all records in SUB1 with FK oldID
      --sp opens a cursor for return 
      CALL GetSUB1Records(oldID)
      for each returned record in the cursor resultset
        --insert into SUB1 values(newID, other data for this row,....)
        CALL CreateSUB1Record(row details)
    END

したがって、私の質問は、CopyNewMainRecord から CopyNewSub1Records への IN のように、newID の OUT を取得しても問題ありませんか?

私は現在、DB 管理者によって DB2 環境で SP を作成する権限が付与されるのを待っているので、これを試みるのではなく質問しています。

4

2 に答える 2

1

私は DB2 にあまり詳しくありませんが、複数のスコープにわたってカーソルを操作するよりも、直接挿入する方がはるかにうまく機能すると思います。

コピー メイン ストアド プロシージャの出力パラメータを他のストアド プロシージャへの入力として使用することは、私にとって完全に理にかなっています。

CopyNewSub1Records を作成する方法の例として、次のようにします。

CREATE PROCEDURE CopyNewSub1Records (IN oldID, IN NewID)
BEGIN
     INSERT INTO Sub1
     (
          ID,
          SubID,
          Col1,
          Col2
     )
     SELECT
          NewID,
          SubID,
          Col1,
          Col2
     FROM
          Sub1
     WHERE
          ID = oldID
END
于 2009-02-11T03:28:54.400 に答える
0

DB2 を使用したことはありませんが、トリガーはサポートされていませんか?

あなたがしようとしているのは、監査テーブルを構築することのようです。以前に SQL Server でこれを行ったことがありますが、正しく行うと非常に便利です。「DB2 Audit Trigger」などをグーグルで検索すると、適切な情報を見つけることができるはずです。

于 2009-02-11T03:45:15.720 に答える