看了ITPUB博主的文章也才知道oracle也這種操作,記錄一下。。
1.for 循環批量insert
create table T_TABLE_SQL ( ids NUMBER, col_name VARCHAR2(20) );
insert into t_table_sql values(001,'trans'); insert into t_table_sql values(002,'json'); create table t_table_sql_2 as select * from t_table_sql where 1=2; select * from t_table_sql; begin for i in (select * from t_table_sql) loop --一直都以為oracle不支持把"行"變量直接和insert操作關聯起來使用,這里"行"變量這個名字是我給起的,不知道是否准確,只要大家能理解就ok. insert into t_table_sql_2 values i; --才曉得,oracle還有這種操作 commit; end loop; end; select * from t_table_sql_2; SQL> select * from t_table_sql_2; IDS COL_NAME ---------- -------------------- 1 trans 2 json
2.游標批量insert
2.1
truncate table t_table_sql_2; select * from t_table_sql_2; declare cursor cur_data is select * from t_table_sql; v_tab t_table_sql%rowtype; begin open cur_data; fetch cur_data into v_tab; while cur_data%found loop insert into t_table_sql_2 values v_tab; fetch cur_data into v_tab; end loop; close cur_data; commit; end;
2.2
truncate table t_table_sql_2; select * from t_table_sql_2; declare cursor cur_data is select * from t_table_sql; type t_tab_rec is record( ids t_table_sql.ids%type, col_name t_table_sql.col_name%type); t_tab t_tab_rec; begin open cur_data; fetch cur_data into t_tab; while cur_data%found loop insert into t_table_sql_2 values t_tab; fetch cur_data into t_tab; end loop; close cur_data; commit; end;