0

我需要动态创建一个查询并使用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 
|| ' )' 

尝试提取查询并以逗号分隔值连接,但最终结果为字符串,但查询中使用的字段为数字

不知道如何在动态查询中处理这个

4

1 回答 1

1

您正在编写的 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 声明一个游标,然后循环遍历它。

于 2020-08-12T14:06:58.703 回答