我需要动态创建一个查询并使用execute Immediate执行,我在添加Vaaray变量时遇到了问题。获取错误
pls-00306 wrong number or types of arguments in call to ||
Vaaray//这是一个型号
select ver_id bulk collect into Ver_Array from ( Select id from table)
以下查询没有问题,因为只使用了id变量:
Execute Immediate 'Select ID, name , Date, time
from table
where id = ' || v_UC2_id
以下查询错误
Execute Immediate 'Select ID, name , Date, time
from table
where id = ' || v_UC2_id
|| ' and ver_id in ( SELECT * FROM TABLE ( '
|| Ver_Array
|| ' )'
尝试提取查询并连接逗号分隔的值,但最终结果为字符串,但查询中使用的字段为Number
不确定如何在动态查询中处理此问题
您正在编写的SQL正在将一个数组与一个字符串连接,因此会出现错误。
你可以这样做:
create or replace type vat is varray(10) of number:
/
declare
ivat vat:=vat(1,2,3);
res number;
begin
execute immediate 'select sum(rn) from tarr where rn in (select column_value from table (:varrt))' into res using ivat;
dbms_output.put_line(res);
end;
/
这里我只选择一行和值。如果您有多行和多列,那么您最好为这个SQL声明一个游标,并循环通过它