Oracle объединяет таблицы при передаче параметров из одной таблицы в функцию, которая возвращает таблицу - PullRequest
0 голосов
/ 11 сентября 2018

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

Вторая таблица:

Table2

|COLUMN1|COLUMN2|

Функция, которая возвращает первую таблицу

SELECT GET_THREE_VALUES(Table2.COLUMN1) TABLE1 FROM DUAL

|COLUMN3|COLUMN4|

И для результата я хочу соединить таблицу из функции и вторую таблицу следующим образом

|COLUMN1|COLUMN2|COLUMN3|COLUMN4|

1 Ответ

0 голосов
/ 11 сентября 2018

Вот как я понял вопрос;поскольку у меня нет ваших таблиц, я попытался имитировать то, что вы сказали с таблицами Скотта.

Сначала создайте несколько типов, которые будут использоваться функцией.

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

Type created.

SQL> create or replace type t_dep_tab is table of t_dep_row;
  2  /

Type created.

Сама функция: она принимает номер отдела и возвращает дополнительную информацию об отделе.Это что-то вроде глупо , поскольку в схеме Скотта он возвращает только одну глубину, но не обращайте на это внимания.

SQL> create or replace function f_dep(par_deptno in number)
  2    return t_dep_tab
  3  is
  4    l_tab t_dep_tab := t_dep_tab();
  5  begin
  6    for cur_r in (select rownum rn, deptno, dname, loc
  7                  from dept
  8                  where deptno = par_deptno)
  9    loop
 10      l_tab.extend;
 11      l_tab(cur_r.rn) := t_dep_row(cur_r.deptno, cur_r.dname, cur_r.loc);
 12    end loop;
 13    return l_tab;
 14  end;
 15  /

Function created.

SQL> -- Does it return anything?
SQL> select * from table(f_dep(20));

    DEPTNO DNAME           LOC
---------- --------------- ----------
        20 RESEARCH        DALLAS

Хорошо, давайте объединим таблицу EMP с функцией.

SQL> select e.deptno, t.dname, t.loc, e.ename, e.job
  2  from emp e join table(f_dep(e.deptno)) t on t.deptno = e.deptno
  3  where e.deptno <= 20
  4  order by e.deptno, e.job;

    DEPTNO DNAME           LOC        ENAME      JOB
---------- --------------- ---------- ---------- ---------
        10 ACCOUNTING      NEW YORK   MILLER     CLERK
        10 ACCOUNTING      NEW YORK   CLARK      MANAGER
        10 ACCOUNTING      NEW YORK   KING       PRESIDENT
        20 RESEARCH        DALLAS     FORD       ANALYST
        20 RESEARCH        DALLAS     SMITH      CLERK
        20 RESEARCH        DALLAS     JONES      MANAGER

6 rows selected.

SQL>

У нас что-то есть.Итак, это было бы как сделать это.Попробуйте применить его к вашему делу и посмотреть, что произойдет.Удачи!

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