Select 从双排成一行?

Select from dual as one row?

至select 个双列中的多个字符串。我已经尝试了下面的解决方案,我可以接受它,使用 PL/SQL 宏添加 "select from dual" 相对容易。我想知道是否还有其他方法可以实现此目的?

select 'AAA' as code
          from dual
        union all
        select 'ABQ'
          from dual
        union all
        select 'ACA'
          from dual
        union all   
          from dual

对于单列查询有。您需要一个 table 的 VARCHAR2 数据库类型,并且一些总是存在于 oracle 中,包括:

  • SYS.KU$_VCNT
  • SYS.DBMS_DEBUG_VC2COLL

(当然,如果您愿意,也可以创建自己的)。

那么你可以这样查询:

select * from table (SYS.KU$_VCNT ('AAA','ABQ','ACA'));

对于包含多个列的查询,您需要专门为该查询创建一个类型,这不是一个很有用的选项。但为了完整起见,您可以这样做:

create type my_obj_t as object(n number, d date, c varchar2(100));
create type my_tab_t as table of my_obj_t;

select * from table (my_tab_t(my_obj_t(1,sysdate,'aaa'),
                              my_obj_t(2,date '2014-12-31','bbb'),
                              my_obj_t(3,sysdate+2,'bbb')));