2

我正在尝试将查询中apex_t_numbers集合中的值SELECT用作WITH子查询:

atn_cur_ids := apex_string.split_numbers(arg_v_ids, ':');
-- So if arg_v_ids := '1:2:3', then atn_cur_ids := apex_t_numbers(1, 2, 3)

with t_cur_ids as (
  select * as id from table(atn_cur_ids);
)
select text from t_texts 
join t_cur_ids on t_texts.id = t_cur_ids.id

这就是问题所在 -apex_t_numbers是一个表number,而不是record带有命名字段的类型。Oracle SQL 不允许为 a 赋予别名,*即使它只有一个“匿名”列。

一个可能的解决方案可能是一个函数

  1. 接收*
  2. 每行返回值

但我知道只有一个可以得到 a*并返回一些东西 - count(*),它不符合第二个要求。

4

1 回答 1

2

好的,找到了解决办法。它可以column_value作为列的名称来完成:

with t_cur_ids as (
  select column_value as id from table(atn_cur_ids);
)
select text from t_texts 
join t_cur_ids on t_texts.id = t_cur_ids.id
于 2019-03-12T09:28:53.203 回答