PL / SQL, как получить результат из функции, которая возвращает таблицу типов - PullRequest
0 голосов
/ 17 апреля 2019

Мне нужно вызвать функцию, которая возвращает TABLE OF MyTable%ROWTYPE.

Я сделал следующее:

 DECLARE
   TYPE type_tab1 IS TABLE OF  Table1%ROWTYPE; 
   v_result1 type_tab1;
BEGIN

   v_result1 := myfunction(p_1, p_2, p_3);

END;

Но это не работает - я получаю сообщение об ошибке:

PLS-00382: выражение имеет неправильный тип.

Что я делаю не так?

1 Ответ

1 голос
/ 17 апреля 2019

Вы не предоставили некоторую информацию, которая может быть полезна, поэтому посмотрите на этот пример, посмотрите, поможет ли он.

Сначала подготовьте все, что нам нужно:

SQL> create or replace type td as object
  2    (deptno number,
  3     dname  varchar2(20),
  4     loc    varchar2(20));
  5  /

Type created.

SQL> create or replace type tty is table of td;
  2  /

Type created.

Функция:

SQL> create or replace function myfunction(p_deptno in number)
  2  return tty is
  3    l_tty tty := tty();
  4  begin
  5    select td(deptno, dname, loc)
  6      bulk collect into l_tty
  7      from dept
  8      where deptno = p_deptno;
  9
 10    return l_tty;
 11  end;
 12  /

Function created.

Проверка:

SQL> select * from table(myfunction(10));

    DEPTNO DNAME                LOC
---------- -------------------- --------------------
        10 ACCOUNTING           NEW YORK

Ваш код:

SQL> set serveroutput on
SQL> declare
  2    v_result tty;
  3  begin
  4    v_result := myfunction(10);
  5    dbms_output.put_line(v_result(1).dname);
  6  end;
  7  /
ACCOUNTING

PL/SQL procedure successfully completed.

SQL>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...