我有一个很重的带有联合的 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;