sql >> Databasteknik >  >> RDS >> Oracle

Kan en SQL-procedur returnera en tabell?

En PL/SQL-funktion kan returnera en kapslad tabell. Förutsatt att vi deklarerar den kapslade tabellen som en SQL-typ kan vi använda den som källa för en fråga med hjälp av funktionen TABLE() .

Här är en typ och en kapslad tabell byggd från den:

SQL> create or replace type emp_dets as object (
  2  empno number,
  3  ename varchar2(30),
  4  job varchar2(20));
  5  /

Type created.

SQL> create or replace type emp_dets_nt as table of emp_dets;
  2  /

Type created.

SQL> 

Här är en funktion som returnerar den kapslade tabellen ...

create or replace function get_emp_dets (p_dno in emp.deptno%type)
    return emp_dets_nt
is
    return_value emp_dets_nt;
begin
    select emp_dets(empno, ename, job)
    bulk collect into return_value
    from emp
    where deptno = p_dno;
    return return_value;
end;
/

... och så här fungerar det:

SQL> select * 
  2  from table(get_emp_dets(10))
  3  /

     EMPNO ENAME                          JOB
---------- ------------------------------ --------------------
      7782 CLARK                          MANAGER
      7839 KING                           PRESIDENT
      7934 MILLER                         CLERK

SQL> 

SQL-typer erbjuder oss en hel del funktionalitet och låter oss bygga ganska sofistikerade API:er i PL/SQL. Läs mer .



  1. Postgres:Aggregera konton till en enda identitet med gemensam e-postadress

  2. hur ska jag definiera sekvenser i mitt projekt (som använder hibernate) på ett sätt som projektet fungerar med både Oracle och Mysql.

  3. MySQL:SELECT och COUNT i samma fråga

  4. Hur formaterar och sorterar man ett datum i Oracle?