将VArray连接到String,并在动态SQL-Oracle中使用



我需要动态创建一个查询并使用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声明一个游标,并循环通过它

相关内容

  • 没有找到相关文章

最新更新