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

Thủ tục / hàm PL / SQL để hiển thị động dữ liệu từ các bảng khác nhau cùng với tên cột trong hàng dữ liệu đầu tiên

Sử dụng từ điển dữ liệu để xây dựng một câu lệnh SQL chọn các cột chính xác. Sử dụng SQL động để mở một con trỏ tới câu lệnh đó và trả lại con trỏ từ hàm.

Lược đồ mẫu

create table tab_1 as
select '00001' id, 'Q0' quarter, 2 risk from dual union all
select '00001' id, 'Q1' quarter, 3 risk from dual union all
select '00001' id, 'Q2' quarter, 1 risk from dual union all
select '00001' id, 'Q3' quarter, 1 risk from dual union all
select '00001' id, 'Q4' quarter, 2 risk from dual;

create table tab_2 as
select '00001' id, 'ACTIVE' status from dual union all
select '00002' id, 'PURGED' status from dual union all
select '00003' id, 'ACTIVE' status from dual union all
select '00004' id, 'ACTIVE' status from dual;

Chức năng

create or replace function get_results(p_id number) return sys_refcursor is
    v_sql varchar2(32767);
    v_refcursor sys_refcursor;
begin
    --Get SQL statement.
    select
        'select ' || 
        listagg(column_name, ',') within group (order by column_id) ||
        ' from ' || table_name
    into v_sql
    from user_tab_columns
    where table_name = 'TAB_' || p_id
        and column_id <= 2
    group by table_name;

    open v_refcursor for v_sql;

    return v_refcursor;
end;
/

Gọi hàm

Hàm sẽ hoạt động miễn là ứng dụng hiểu được các con trỏ. Dưới đây là một ví dụ trong phiên bản gần đây của SQL * Plus:

SQL> select get_results(1) from dual;

GET_RESULTS(1)
--------------------
CURSOR STATEMENT : 1

CURSOR STATEMENT : 1

ID    QU
----- --
00001 Q0
00001 Q1
00001 Q2
00001 Q3
00001 Q4



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Điều này có khả thi trong Oracle / Sql không?

  2. Thư mục sản phẩm Cài đặt Oracle và thư mục đường chéo ở vị trí khác nhau

  3. SQL Oracle LEFT JOIN và lỗi SUBQUERY:ORA-00905:thiếu từ khóa

  4. Tại sao Hibernate ném org.hibernate.exception.LockAcquisitionException?

  5. ODAC dường như là lược đồ bảng bộ nhớ đệm?