【问题标题】:Select a column from table return by function in Oracle从Oracle中按函数返回的表中选择一列
【发布时间】:2020-12-22 10:07:01
【问题描述】:

我有一个返回自定义对象表的函数。我希望从返回的结果中按名称选择某一列。

create or replace type sd_Serial_Number as object (
  serial_number VARCHAR2(32)
);

对象表

create or replace type sd_Serial_Number_Table as table of sd_Serial_Number;

功能

create function get_result
return sd_Serial_Number_Table as
    v_ret   sd_Serial_Number_Table;

begin
    select sd_Serial_Number(selected.SERIAL_NUMBER)
           bulk collect into v_ret
    from (
        selection here
        ) selected;

    return v_ret;
end get_result;

当我以这种方式调用函数时,我会得到一个名为 SERIAL_NUMBER 的单列的结果

select * from table(get_result());

但是,我不能这样做

select SERIAL_NUMBER from table(get_result());

有没有办法选择 SERIAL_NUMBER 列?

【问题讨论】:

    标签: sql oracle oracle11g sql-function


    【解决方案1】:

    “我不能”很难调试。我会告诉你我可以(在你使用的同一个数据库版本上)。

    SQL> SELECT * FROM v$version WHERE rownum = 1;
    
    BANNER
    --------------------------------------------------------------------------------
    Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production
    

    SQL> CREATE OR REPLACE TYPE sd_serial_number AS OBJECT
      2  (
      3     serial_number VARCHAR2 (32)
      4  );
      5  /
    
    Type created.
    
    SQL> CREATE OR REPLACE TYPE sd_serial_number_table AS TABLE OF sd_serial_number;
      2  /
    
    Type created.
    
    SQL> CREATE OR REPLACE FUNCTION get_result
      2     RETURN sd_serial_number_table
      3  AS
      4     v_ret  sd_serial_number_table;
      5  BEGIN
      6     SELECT sd_serial_number (deptno)
      7       BULK COLLECT INTO v_ret
      8       FROM dept;
      9
     10     RETURN v_ret;
     11  END get_result;
     12  /
    
    Function created.
    

    测试:

    SQL> SELECT * FROM TABLE (get_result ());
    
    SERIAL_NUMBER
    --------------------------------
    10
    20
    30
    40
    
    SQL> SELECT serial_number FROM TABLE (get_result ());
    
    SERIAL_NUMBER
    --------------------------------
    10
    20
    30
    40
    
    SQL>
    

    【讨论】:

    • 是的,非常感谢 :) IDE 显示为红色,所以我认为它不起作用。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-02
    • 2021-10-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多