【发布时间】:2021-09-24 08:35:18
【问题描述】:
我的查询执行时没有错误或问题
select * from table(get_values_in_rows('word1:word2:word3:word4:word5:word6'));
但是当我使用查询作为字符串参数时,例如它不执行
select * from table(get_values_in_rows(
'select branch_id from nazim_shift where user_level=5 and lower(nazim_login_id)=:value1'
));
注意:
create or replace function get_values_in_rows(pv_colon_values in varchar2) return t_rows_tab is
list_values t_rows_tab := t_rows_tab();
begin
for i in (SELECT distinct REGEXP_SUBSTR(pv_colon_values, '[^:]+', 1, LEVEL) colon_values FROM dual
CONNECT BY REGEXP_SUBSTR(pv_colon_values, '[^:]+', 1, LEVEL) IS NOT NULL)
loop
list_values.extend;
list_values(list_values.last) := t_rows(i.colon_values);
end loop;
return list_values;
end get_values_in_rows;
select branch_id from nazim_shift where user_level=5 and lower(nazim_login_id)=:value1
上面的查询将返回冒号分隔的值
我们正在使用 oracle 11g
【问题讨论】:
-
你使用了一些自定义函数,我们不知道它应该做什么
-
没人知道你的函数“get_values_in_rows”会做什么。你应该写它。
-
如果提供的 select 语句返回一个标量值,它是以冒号分隔的列表,您需要将其传递给您的函数,不带引号
-
@astentx @Rezu 显然“get_values_in_rows”是一个split 函数。我会把它命名为
split()或to_table(),但它是'get_values_in_rows'。为什么 OP 将 SQL 查询的文本传递给它,我们只能猜测。 -
@WilliamRobertson 是的,顾名思义,它应该进行拆分。但是 OP 尝试将查询作为参数传递的原因尚不清楚。它可能在接收和执行查询的方式上“过载”,这就是为什么需要澄清黑盒部分(尤其是在没有任何示例数据时)
标签: sql oracle oracle11g oracle-sqldeveloper