Oracle
 sql >> база данни >  >> RDS >> Oracle

EXECUTE IMMEDIATE в plsql

Ако наистина трябва да select * from име на динамична таблица , тогава вероятно бих избрал dbms_sql

Въведете за запис :

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

Въведете за набор от резултати (което е масив от записи ):

create type tq84_varchar2_tab_tab as table of tq84_varchar2_tab;
/

Функцията, която извършва избора и връща екземпляр от набора резултати :

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;

След това функцията може да се използва с нещо като:

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. Oracle LISTAGG() за множество атрибути?

  2. Oracle Еквивалент на MySQL INSERT IGNORE?

  3. Изпълнение на SQL скрипт в oracle db един израз наведнъж

  4. SQLcl за прехвърляне на данни от Oracle към PostgreSQL или YugabyteDB 🅾🐘🚀

  5. Критерии за хибернация за дати