【发布时间】:2015-04-17 14:50:53
【问题描述】:
我对执行立即语句中的“动态使用子句”有疑问。我还需要动态设置“执行立即语句”和 using 子句。不知道表结构,只知道表名,需要对其进行操作更新。
所以我写了一个函数(通过 user_tab_columns 和 user user_constraints 表)来使用 update 语句和 bind_variable 设置一个变量,但现在我需要使用变量列表设置 using 子句。
例子:
CREATE TABLE table1
(
rec1 VARCHAR2(10 BYTE) NULL,
rec2 DATE NULL,
rec3 number(9) not null
);
declare
TYPE cur_type IS REF CURSOR;
cur cur_type;
table_list table1%ROWTYPE;
sqlstring varchar2(400);
begin
OPEN cur FOR sqlstring;
LOOP
FETCH cur INTO table_list;
EXIT WHEN cur%NOTFOUND;
sqlstring:=function1('table1');
-- that returns sqlstring:='update table1 set rec1=:1 , rec2=:2 , rec3=:3 where rec_id=:c4';
execute immediate sqlstring using table_list.rec1, table_list.rec2, table_list.rec3, table_list.rec_id;
END LOOP;
close cur;
end;
我需要动态实现游标table_list的变量列表。
"使用 table_list.rec1、table_list.rec2、table_list.rec3、table_list.rec_id 执行立即 sqlstring"
有人知道如何解决这个问题吗?
【问题讨论】:
-
function1的功能如何。我认为您必须使用DBMS_SQL已经存在的包,而不是返回一个简单的语句。 -
您所显示的内容实际上有什么问题 - 您是否得到错误或错误的结果?
-
你从哪里得到“table_list.rec_id”?它不是你的表结构的一部分
标签: oracle dynamic plsql cursor using