【问题标题】:How do I select an array from the results of a query?如何从查询结果中选择数组?
【发布时间】:2013-05-01 06:19:48
【问题描述】:

我创建了一个 VARRAY 类型:

CREATE TYPE my_array AS varray(1024) OF VARCHAR2(512);

我知道我可以使用my_array() 从值列表中创建my_array 的实例:

SELECT my_array('foo', 'bar');

但是有没有办法根据查询结果创建一个实例?我在想这样的事情:

SELECT my_array(SELECT table_name FROM all_tables WHERE owner = 'SCOTT')
  FROM dual;

或者,如果失败,则返回 my_array 的聚合:

SELECT my_array_agg(table_name) FROM all_tables WHERE owner = 'SCOTT';

这在 Oracle 中可行吗?

【问题讨论】:

    标签: arrays oracle subquery aggregate varray


    【解决方案1】:

    在plsql中批量收集

    declare 
    arr my_array;
    begin 
    SELECT table_name bulk collect into arr FROM all_tables WHERE owner = 'SCOTT';
    end;
    

    select collect(table_name) from all_tables where owner = 'SCOTT';
    

    但是你不能在 sqlplus 中对这样的集合做任何事情。

    【讨论】:

    • 幸运的是,我使用the DBIOracle Driver knows 将集合转换为数组。不过让我想知道:我可以定义一个列来存储COLLECT() 的结果吗?还是必须是 VARRAY?
    • 你有没有试过铸造....select cast(collect(col) as my_array) from ...
    • 是的,效果很好。我的意思是不必创建一个类型,而只是 collect() 返回的对象作为列类型。这似乎不可行。
    • dbms_utility 中有两个内置数组类型 - 看看你就可以使用它们。
    猜你喜欢
    • 1970-01-01
    • 2012-01-03
    • 1970-01-01
    • 2012-11-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-18
    • 1970-01-01
    相关资源
    最近更新 更多