Выберите столбец из таблицы, возвращаемой функцией в Oracle

У меня есть функция, которая возвращает таблицу пользовательских объектов. Я хочу выбрать определенный столбец по имени из возвращаемого результата.

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?

ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
0
0
844
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 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 была красной, поэтому я подумал, что она не работает.

Jalil.Jarjanazy 22.12.2020 11:36

Другие вопросы по теме