oracle数据库,批量插入数据脚本

批量插入数据脚本
1、第一种批量插入数据脚本,可以基本满足要求。理解上较为简单,所以这个最常用。

DECLARE
  maxnumber CONSTANT INT := 5000;--插入5000条数据
  i INT := 1;--i的取值从1开始
BEGIN
  FOR i IN 1 .. maxnumber loop
    insert into ODS.TABLE1--表名
      (ID, P_ID, DECL_PORT,lastupdateddt ,NOBER)--表字段
    values
      (ODS.seq_cert_id.nextval,'11' || i || '', '2215',to_timestamp('30-01-2019 12:51:22.004610','dd-mm-yyyy hh24:mi:ss.ff'), '55');--表字段内容,ODS.seq_cert_id.nextval是id递增序列名
  END loop;
  COMMIT;
END;

NEXTVAL和CURRVAL的区别:
1、如果 sequence.CURRVAL 和 sequence.NEXTVAL 都出现在一个 SQL 语句中,则序列只增加一次。在这种情况下,每个 sequence.CURRVAL 和 sequence.NEXTVAL 表达式都返回相同的值,不管在语句中sequence.CURRVAL 和 sequence.NEXTVAL 的顺序。

DECLARE
  maxnumber CONSTANT INT := 3;
  i INT := 1;
BEGIN
  FOR i IN 1 .. maxnumber loop
    insert into ODS.AS
     (ID, NSRMC, CAPXTIMESTAMP)
    values
      (SRC_SENS_SHBDCLG.SEQ_LG_FINANCE_ACCOUNT.NEXTVAL, SRC_SENS_SHBDCLG.SEQ_LG_FINANCE_ACCOUNT.CURRVAL,  '17-12月-20 03.21.24.173369 下午');
  END loop;
  COMMIT;
END;

执行脚本结果如下:


2、第二种批量插入数据脚本

DECLARE
       max_count number(10);  --定义变量
begin
     max_count:=0;     
     while(max_count < 4000000)   
     LOOP
         insert into ODS.TABLE1
                        (ID,COPNAME,STATUS,CREATE_TIME,update_time) 
         values (max_count,'DHL',0,sysdate,sysdate);
        -- DBMS_OUTPUT.put_line(max_count);      --输出当前循环数
          max_count := max_count + 1;
     end loop;
END;

3、两个表,同时批量插入数据的脚本


DECLARE 
    maxhead CONSTANT INT:=1;  
    NEXT_ID varchar(18);
BEGIN 
        FOR i IN 1..maxhead LOOP              
    insert into ODS.LG_FINANCE_ACCOUNT
     (ID, NSRSBH,NSRMC, SSSR_HJ, CKTS, ZZ_TAX, YY_TAX, XF_TAX, QYSD_TAX, GRSD_TAX, FC_TAX, CC_TAX, YH_TAX, CSWHJS_TAX, YGZ_TAX, MARK1, MARK2, MARK3, MARK4, MARK5, MARK6, JNYF, FILE_NAME, FILE_LAST_MODIFIED_TIME, DELETE_FLAG, CREATE_TIME, CAPXTIMESTAMP)
    values
      (ODS.SEQ_LG_FINANCE_ACCOUNT.NEXTVAL, '91310115MA1H896G'||i||'', ODS.SEQ_LG_FINANCE_ACCOUNT.CURRVAL, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, '临港地区', '南汇新城镇', '新京点', '新京点', '注册型企业', '正常户', '202001', 'CZ_南汇新城镇_1月税收汇总数据.xlsx', '17-12月-20 03.24.09.000000 下午', '1', '17-12月-20 03.21.24.173369 下午', '17-12月-20 03.21.24.173369 下午');

    Insert into ODS.LOG_STATISTICAL_FISCAL_API
          (ID, FILE_PATH, FILE_NAME, FILE_TYPE, FILE_SIZE, FILE_MODIFIED_TIME, TABLE_NAME, START_TIME, END_TIME, SUCCESS_TOTAL, ERROR_TOTAL, CREATE_TIME, CAPXTIMESTAMP)
    Values(ODS.SEQ_LG_FINANCE_ACCOUNT.CURRVAL, null, 'CZ_南汇新城镇_1月税收汇总数据test1.xlsx', 'xlsx', 2869793, '17-12月-20 03.38.57.000000 下午', 'LG_FINANCE_ACCOUNT', '17-12月-20 03.38.59.000000 上午', '17-12月-20 03.39.02.000000 上午', 1000, 0, '17-12月-20 03.36.10.391104 下午', '17-12月-20 03.36.10.391104 下午');            
                        
        commit;
        END LOOP;    
END; 

3、
4、涉及子表时,批量插入数据脚本,

--主表、主表插入批量数据--
--1、人工指定主表、子表ID值--
--K  主表ID起始值--
--maxhead 主表ID结束值--
--maxlist 每条主表对应的子表条数--
DECLARE 
    maxhead CONSTANT INT:=10;  
    maxlist CONSTANT INT:=3;  
    i INT :=1;
    j INT :=1; 
    k INT :=1;
BEGIN 
    FOR i IN K..maxhead LOOP 
        insert into ODS.TABLE1
                (ID,COPNAME,HBBB,STATUS,CREATE_TIME,update_time) 
        values 
                (i,'DHL',0,i,sysdate,sysdate);    
       
        FOR j IN 1..maxlist LOOP 
            INSERT INTO ODS.TABLE2 
                (ID,A_id,file_name,S_PATH,FILE_CTIME) 
            VALUES 
                (maxlist*(i-1)+j,i,maxlist*(i-1)+j,to_char(sysdate,'yyyy-mm-dd' || '/'),sysdate);
        END LOOP;
        COMMIT;
    END LOOP;
END; 

--2、自动获取主表、子表的SEQUENCE作为ID值
--maxhead 主表条数
--maxlist 每条主表对应的子表条数
DECLARE 
    maxhead CONSTANT INT:=2;  
    maxlist CONSTANT INT:=3;  
    i INT :=1;
    j INT :=1; 
BEGIN 
    FOR i IN 1..maxhead LOOP 
        insert into ODS.TABLE1
            (ID,A_id,STATUS,CREATE_TIME,update_time) 
        values 
            (ODS.seq_A_id.nextval,ODS.seq_cert_id.nextval,0,sysdate,sysdate);    
       
        FOR j IN 1..maxlist LOOP 
            INSERT INTO ODS.TABLE2
                (ID,A_id,A_PATH,UPLOAD_TIME) 
            VALUES
                (ODS.seq_A_id.nextval,ODS.seq_A_id.nextval,to_char(sysdate,'yyyy-mm-dd' || '/'),sysdate);
        END LOOP;
        commit;
    END LOOP;
END; 

5、批量修改数据

DECLARE
  maxnumber CONSTANT INT := 5000;
  i INT := 1;
BEGIN
  FOR i IN 1 .. maxnumber loop
    update ODS.TABLE1
       set lastupdateddt = to_timestamp(to_char(Sysdate,
                                                'yyyy-mm-dd hh24:mi:ss'),
                                        'yyyy-mm-dd hh24:mi:ss.ff')
                           ,NOBER= '2' || i || ''
     where P_ID= '11' || i || '';
  END loop;
  COMMIT;
END;

时间取数方式:
一、SYSTIMESTAMP(取当前系统值)
二、SYSDATE(取当前系统值,但只精确到时,分和秒都为0)
三、固定值为:TO_TIMESTAMP ('2019-2-12 15:24:45.703000', 'yyyy-mm-dd hh24:mi:ss.ff6')

把固定的字段改为变量:
方式一:’||i||’ 例:’{“no”:“111’||i||’”}’(此方式)
方式二:concat 例:concat(concat(’{“blNo”:111"’,i),’"}’)

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容