【发布时间】:2012-07-26 00:12:37
【问题描述】:
我有一个带有联合的大量 SQL 语句,其中代码不断被重用。我希望找出是否有一种方法可以重用单个绑定变量,而无需多次重复该变量以“使用”。
在我将“USING”行更改为“USING VAR1,VAR2,VAR1;”之前,下面的代码会返回“并非所有变量都绑定”
我希望避免这种情况,因为我在这两种情况下都提到 :1 - 有什么想法吗?
declare
var1 number :=1;
var2 number :=2;
begin
execute immediate '
select * from user_objects
where
rownum = :1
OR rownum = :2
OR rownum = :1 '
using var1,var2;
end;
/
编辑:有关更多信息,我正在使用动态 SQL,因为我还生成了一系列 where 条件。
我不擅长使用 SQL 数组(我在代码中使用游标,但我认为这会使问题过于复杂),但伪代码是:
v_where varchar2(100) :='';
FOR i in ('CAT','HAT','MAT') LOOP
v_where := v_where || ' OR OBJECT_NAME LIKE ''%' || i.string ||'%''
END;
v_where := ltrim(v_where, ' OR');
然后将上面的 SQL 修改为:
execute immediate '
select * from user_objects
where
rownum = :1
OR rownum = :2
OR rownum = :1 AND ('||V_WHERE||')'
using var1,var2;
【问题讨论】: