问题描述
我需要动态创建查询并使用立即执行执行,我在附加 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,time
from table
where id = ' || v_UC2_id
|| ' and ver_id in ( SELECT * FROM TABLE ( '
|| Ver_Array
|| ' )'
试图提取查询并将其连接为逗号分隔的值,但最终结果为字符串,但查询中使用的字段为 Number
不确定如何在动态查询中处理此问题
解决方法
您正在编写的SQL将数组与字符串连接在一起,因此会出现错误。
您可以这样做:
var input = [{"cost":"1.3947648891000006","start_date":"2020-06-10","account":"1"},{"cost":"1.4069091170999999","start_date":"2020-06-11",{"cost":"1.401164025099997","account":"2"},{"cost":"2.50928182113","start_date":"2020-06-12","account":"2"}];
var grouped = input.reduce( (acc,i) => {
if(acc.hasOwnProperty(i.start_date))
acc[i.start_date].push(i);
else
acc[i.start_date] = [i];
return acc;
},{});
var result = Object.entries(grouped).map( entry => {
var [key,value] = entry;
var obj = {start_date:key};
for(var i=0;i<value.length;i++)
obj[`account_${value[i].account}_cost`] = value[i].cost;
return obj;
});
console.log(result);
在这里,我只选择一行和值。如果您有多行和多列,那么最好为该SQL声明一个游标,然后遍历它。