sql >> Database >  >> RDS >> Oracle

Kan een SQL-procedure een tabel retourneren?

Een PL/SQL-functie kan een geneste tabel retourneren. Op voorwaarde dat we de geneste tabel als een SQL-type declareren, kunnen we deze gebruiken als de bron van een query, met behulp van de de functie TABLE() .

Hier is een type en een geneste tabel die daaruit is opgebouwd:

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> 

Hier is een functie die die geneste tabel retourneert ...

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;
/

... en zo werkt het:

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

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

SQL> 

SQL Types bieden ons veel functionaliteit en stellen ons in staat om behoorlijk geavanceerde API's in PL/SQL te bouwen. Meer informatie .



  1. Oracle-tabel(len)gegevens naar INSERT-instructies met JAVA

  2. Kan niet importeren in heroku postgres-database vanuit dump

  3. Query voor top N per groepscode werkt voor MySQL maar ander resultaat voor MariaDB

  4. MySQL voor Visual Studio-installatie mislukt, foutcode 1603