【发布时间】:2015-12-01 16:55:55
【问题描述】:
我正在尝试将存档表中的一行复制到原始表中。
没有我的WHERE 子句,table2 的整个表都会被复制到 table1。
我当然不想要这个。因此,根据列出的gridview的ID值,表格将只复制ID相同的行。
当我调试这些行时,我得到了为 DisplaySup.Rows(0).Cells(2).Text 列出的正确 ID。
(
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
所以我尝试引用:EXECUTE IMMEDIATE with USING clause giving errors
像这样修复 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
选择语句后的col72
我的表示例(两者相同)table2的目的是当table1中的一行被删除时,table2可以重新创建被删除的用户
表1
ID CompanyName FirstName LastName ....(72 cols)
表2
ID CompanyName FirstName LastName...(72 列)
【问题讨论】:
标签: stored-procedures oracle10g where sql-insert execute-immediate