アーカイブ テーブルから元のテーブルに 1 行をコピーしようとしています。
この句がないと、WHERE
table2 のテーブル全体が table1 にコピーされます。もちろん、これはしたくありません。したがって、リストされているグリッドビューの ID 値に基づいて、テーブルは ID が同じ行のみをコピーします。
行をデバッグすると、正しい ID が表示されDisplaySup.Rows(0).Cells(2).Text
ます。
(
val_ID table2.V_ID%type
)
is
begin
execute immediate 'insert into table1 (select * from table2 where V_ID = val_ID)';
end;
それでもエラーが発生します
ORA-00904: "VAL_ID": 識別子が無効です
Table2 と Table1 の列は同じです。そのため、どちらにも というタイトルの列がありますV_ID
。なぜVal_ID
エラーにフラグを立てているのかわかりません。
VB.net のコーディング行:
SupArchive.Parameters.Add("val_ID", OleDbType.VarChar).Value = DisplaySup.Rows(0).Cells(2).Text
だから私は参照しようとしました:エラーを与える USING 節を持つ EXECUTE IMMEDIATE
WHERE を修正するには、次のようにします。
(
val_ID table2.V_ID%type
)
is
begin
execute immediate 'insert into table1 (select * from table2 where V_ID = '||val_ID||')';
end;
しかし、私はエラーが発生します:
ORA-00904: "val_ID": 識別子が無効です
ストアド プロシージャを修正する方法について何か提案はありますか?
アップデート:
提案されたことをしようとしました:
(
val_ID table2.V_ID%type
)
AS
BEGIN
execute immediate 'insert into table1 (col1, col2, col3...)(select col1, col2, col3... from table2 where V_ID = :val_ID)' using val_ID;
end;
しかし、エラーが発生します:
ORA-00904: "col72": invalid identifier
Select ステートメントの後の col72 の場合
私のテーブルの例 (どちらも同じです) table2 の目的は、table1 で行が削除されたときに、table2 が削除されたユーザーを再作成できることです。
表1
ID 会社名 名 姓 ....(72 列)
表2
ID CompanyName FirstName LastName... (72 列)