sql >> Databasteknik >  >> RDS >> Oracle

Oracle 11g - hur man returnerar post från funktion med table join

Tja, du kanske saknar ännu en typ, baserad på MYTYPE .

Här är ett exempel (jag använder Scotts schema eftersom jag inte har dina tabeller). Jag har lagt till DEPTNO till MYTYPE så att jag skulle kunna sammanfoga resultatet (returneras av funktionen) med EMP bord.

Det här är vad du har:

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

Type created.

Det här är vad du saknar:

SQL> create or replace type mytab as table of mytype;
  2  /

Type created.

En funktion:notera rad 9:

SQL> create or replace function myfunc (p_in number) return mytab is
  2    v_dname varchar2(20);
  3    v_loc   varchar2(20);
  4  begin
  5    select dname, loc
  6      into v_dname, v_loc
  7      from dept
  8      where deptno = p_in;
  9    return mytab(mytype(p_in, v_dname, v_loc));
 10  end myfunc;
 11  /

Function created.

Testar:

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

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

SQL>
SQL> select e.ename, e.sal, m.dname, m.loc
  2  from emp e join table(myfunc(e.deptno)) m on m.deptno = e.deptno
  3  where e.deptno = 10
  4  order by m.dname, e.ename;

ENAME             SAL DNAME                LOC
---------- ---------- -------------------- --------------------
CLARK            2450 ACCOUNTING           NEW YORK
KING            10000 ACCOUNTING           NEW YORK
MILLER           1300 ACCOUNTING           NEW YORK

SQL>


  1. Så här löser du ORA-29283:ogiltig filoperation

  2. Vilken kolumn för främmande nyckel:id eller någon annan kolumn och varför?

  3. Heroku Review Apps:kopiera DB för att granska app

  4. mysql kväver vissa tecken och mssql inte