0

StartDate フィールドと EndDate フィールド、およびその他の多数のフィールドを持つテーブルがあります。CurrentDate フィールドと 2 つの計算フィールドがあることを除いて、元のテーブルとまったく同じように見える別のテーブルに、StartDate と EndDate を含むすべての日付で各レコードを分割する必要があります。CurrentDate フィールドは、私が操作している StartDate と EndDate の間の現在の日付です。

私の質問は、これには大量のフィールドがあるため、ストアドプロシージャ内から、カーソルが現在ある行全体とこの1つの新しい列を挿入する簡単な方法はありますか?挿入ステートメント?とても退屈です。

4

2 に答える 2

0

ソース テーブルと宛先テーブルがこのプロファイルに適合する場合:

  1. 宛先テーブルの列がソース テーブルの列と同じであり、
  2. 新しい宛先列は最後にあります

...次に、次のようなことができます。

INSERT INTO dest_table
SELECT Source_Table.*, new_value
  FROM Source_Table
  WHERE Source_Table.PKValue = cursor.PKValue

カーソルが宛先テーブルに似ている場合は、次のようなものが機能する可能性がありますが、テストしていないことに注意してください。

CREATE PROCEDURE whatever IS
  destRow dest_table%ROWTYPE;
  CURSOR fromSourceTable IS
    SELECT <your existing select list>, NULL AS new_value
    FROM <the rest of your cursor query>;
BEGIN
  FOR destRow IN fromSourceTable LOOP
     destRow.new_value = <the split date>;
     INSERT INTO dest_table VALUES destRow;
  END LOOP;
END whatever;

私は手足で出かけNULL AS new_valueます。問題がある場合はCAST(NULL AS DATE) AS new_value代わりに試してください。それでも問題がある場合は、次のようなものを試してくださいSYSDATE AS new_value。繰り返しますが、これはテストされていませんが、有望だと思われ、実装に問題がある場合は、喜んでテストします。

于 2013-05-03T19:07:24.990 に答える