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

THỰC HIỆN NGAY LẬP TỨC trong plsql

Nếu bạn thực sự cần select * from tên bảng động , thì tôi có thể chọn dbms_sql

Nhập cho một bản ghi :

create type tq84_varchar2_tab as table of varchar2(4000);
/

Nhập cho một tập hợp kết quả (là một mảng bản ghi ):

create type tq84_varchar2_tab_tab as table of tq84_varchar2_tab;
/

Hàm thực hiện chọn và trả về một phiên bản của tập hợp kết quả :

create or replace function tq84_select_star_from_table(table_name in varchar2) 
    return tq84_varchar2_tab_tab
as
    stmt_txt     varchar2(4000);
    cur          number;
    columns_desc dbms_sql.desc_tab;
    column_cnt   number;

    result_set   tq84_varchar2_tab_tab;

begin

    stmt_txt := 'select * from ' || table_name;    

    cur := dbms_sql.open_cursor;

    dbms_sql.parse(cur, stmt_txt, dbms_sql.native);
    dbms_sql.describe_columns(cur, column_cnt, columns_desc);
    dbms_sql.close_cursor(cur);


    stmt_txt := 'select tq84_varchar2_tab(';

    for i in 1 .. column_cnt loop 

        if i != 1 then
           stmt_txt := stmt_txt || ',';
        end if;

        stmt_txt := stmt_txt || columns_desc(i).col_name;

    end loop;

    stmt_txt := stmt_txt || ') from ' || table_name;

--  dbms_output.put_line(stmt_txt);

    execute immediate stmt_txt 
    bulk collect into result_set;

    return result_set;


end tq84_select_star_from_table;

Sau đó, hàm có thể được sử dụng với những thứ như:

declare
  records   tq84_varchar2_tab_tab;
begin

  records := tq84_select_star_from_table('user_objects');

  for i in 1 .. records.count loop
      dbms_output.put_line (records(i)(5) || ': ' || records(i)(1));
  end loop;

end;
/


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Sự cố khi chuyển dự án .NET từ không được quản lý sang tổ hợp ODP.NET được quản lý

  2. Làm cách nào để xem các truy vấn được thực thi với Oracle?

  3. Khắc phục hạn chế về chèn hàng loạt qua liên kết cơ sở dữ liệu

  4. Làm cách nào để tạo trường varchar2 ngắn hơn trong Oracle?

  5. Sử dụng Oracle SQL, làm thế nào để xuất số ngày trong tuần và ngày trong tuần?