Select 来自 table return 的列(按 Oracle 中的函数)
Select a column from table return by function in Oracle
我有一个 returns 自定义对象的 table 功能。我希望从返回的结果中按名称 select 某一列。
create or replace type sd_Serial_Number as object (
serial_number VARCHAR2(32)
);
对象table
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());
有没有办法 select 列 SERIAL_NUMBER ?
“我不能”很难调试。我将向您展示 我可以(在您使用的相同数据库版本上)。
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>
我有一个 returns 自定义对象的 table 功能。我希望从返回的结果中按名称 select 某一列。
create or replace type sd_Serial_Number as object (
serial_number VARCHAR2(32)
);
对象table
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());
有没有办法 select 列 SERIAL_NUMBER ?
“我不能”很难调试。我将向您展示 我可以(在您使用的相同数据库版本上)。
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>