Oracle
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Oracle

Oracle 11g - cách trả về bản ghi từ hàm với phép nối bảng

Chà, bạn có thể còn thiếu một loại khác, dựa trên MYTYPE .

Đây là một ví dụ (Tôi đang sử dụng lược đồ của Scott vì tôi không có bảng của bạn). Tôi đã thêm DEPTNO vào MYTYPE để tôi có thể nối kết quả (do hàm trả về) với EMP bảng.

Đây là những gì bạn có:

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

Type created.

Đây là những gì bạn đang thiếu:

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

Type created.

Một chức năng:ghi chú dòng 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.

Thử nghiệm:

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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Oracle:Tôi cần chọn n hàng từ mỗi k hàng của bảng

  2. Lỗi khi cập nhật Tham gia

  3. cách thay đổi dấu phân cách trong sqlplus trong oracle 11g

  4. Oracle lấy số DISTINCT với CLOB trong truy vấn

  5. Hàm ROUND (ngày) trong Oracle