1. 程式人生 > >EXECUTE IMMEDIATE _ Oracle example

EXECUTE IMMEDIATE _ Oracle example

set serveroutput on; DECLARE    v_table_name varchar(100):='abc';    sql_stmt varchar(255):='default';    cnt NUMBER:=0;    cursor tbl is select table_name from  TBP_tables_tmp; BEGIN   update  TBP_tables_tmp  set cnt=0;    FOR reg IN tbl  LOOP         --dbms_output.put_line ( reg.table_name );     v_table_name :=reg.table_name;     sql_stmt :=  'update  TBP_tables_tmp '                   || ' set cnt=( '                    || 'select count(transaction_status)  from '                   ||v_table_name                    ||' where transaction_status=''PUB'''                   || ') where table_name='''                    || v_table_name || '''';       DBMS_OUTPUT.put_line (sql_stmt);            EXECUTE IMMEDIATE sql_stmt  ;   end loop;      select table_name into v_table_name from   TBP_tables_tmp where cnt>0; 

sql_stmt :='update ' ||v_table_name || ' set TRANSACTION_STATUS=''NEW'' where TRANSACTION_STATUS=''PUB'''; DBMS_OUTPUT.put_line (sql_stmt);  EXECUTE IMMEDIATE sql_stmt  ;     END; /

------------------

create table TBP_tables_tmp (table_name varchar2(50), cnt number);