【发布时间】:2015-09-29 03:11:08
【问题描述】:
我有一列(USING_FUNCTION) 函数名称,例如 GET_FUNCTION(#value#) 和另一列 (VALUE),其中包含要使用的值
我正在尝试使用以下方法将函数名称和值集中到批量运算符中:
Select (substr(using_function, 1, instr(using_function, '(', -1) -1))
|| '(' || value || ')'
bulk collect into V_value
from table1
where using_function != 'N';
然后使用 execute immediate 调用该函数(例如 Executing GET_WEEK_DATE(-2) 将给我 16-SEP-2015 ),然后将其插入另一个表(table2):
Execute immediate ' insert into table2 (name,value) select name, '
|| V_value ||' from table1 where using_function != ''N''';
我收到一个错误:调用“||”时参数的数量或类型错误。
*ps 我避免使用循环
【问题讨论】:
-
请检查USING_FUNCTION列中的函数所需要的参数是否与传给它的值一致。例如,如果函数是 mod(),并且该函数需要 2 个参数,如果 VALUE 列中包含的值小于 2,则会导致错误。
-
感谢您的建议 :) 但是 USING_FUNCTION 列中的函数并不一致,它只需要 1 个参数
-
请解释为什么要避免使用循环。从
table1以及生成的语句使用的表中发布函数调用和值的真实示例数据 -
您以错误的方式引用 V_value。它是一个集合,因此您必须将其称为 V_value(index) 而不是单独称为 V_value。如果您不想使用循环的原因是因为它会减慢您的程序,那么
forall是您的选择。它以“批量”的方式插入您的数据,而不是逐行插入,这使其速度更快。 :) -
尝试添加另一个将执行该函数的查询,因为第一个查询只是将其按原样保存在数据库中。