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

问题描述

我需要动态创建查询并使用立即执行执行,我在附加 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声明一个游标,然后遍历它。