sql >> Database teknologi >  >> RDS >> Oracle

Oracle 11g - hvordan man returnerer post fra funktion med tabel join

Nå, du mangler måske endnu en type, baseret på MYTYPE .

Her er et eksempel (jeg bruger Scotts skema, da jeg ikke har dine tabeller). Jeg har tilføjet DEPTNO ind i MYTYPE så jeg ville være i stand til at forbinde resultatet (returneret af funktionen) med EMP tabel.

Dette er, hvad du har:

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

Type created.

Dette er, hvad du mangler:

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

Type created.

En funktion:bemærk linje 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.

Test:

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. Bevaring af sideændringshistorik. Lidt ligesom SO gør for revisioner

  2. Kommandoer ude af synkronisering; du kan ikke køre denne kommando nu

  3. Sådan omgår du ORA-02014:kan ikke vælge TIL OPDATERING fra visning med DISTINCT, GROUP BY osv.

  4. mySQL-returindeks efter indsættelse