Oracle存储过程随记(一)

1.包含输出某个时间段的所有时间,执行动态的sql。传入动态的参数包括表名

create or replace procedure pro_updateStock_betweenTime(beginTime in varchar2,
                                                        endTime   in varchar2) is
  num number;
  v_tableName varchar2(2000);
  i number;

  cursor time_data is
    SELECT TO_CHAR(TO_DATE(beginTime, 'yyyy-MM-dd') + ROWNUM - 1,
                   'yyyyMMdd') as curday,
           'scm_stockagereport' ||
           TO_CHAR(TO_DATE(beginTime, 'yyyy-MM-dd') + ROWNUM - 1, 'yyyyMM') as tableName
      FROM DUAL
    CONNECT BY ROWNUM <=
               trunc(to_date(endTime, 'yyyy-MM-dd') -
                     to_date(beginTime, 'yyyy-MM-dd')) + 1;

  time_row time_data%rowtype;

begin
  
  i := 1;

  for time_row in time_data loop
    
    
    --判断表是否存在  如果存在判断遍历的表名是否相同  不相同就删除表然后重新创建
    select count(1) into num from user_tables a where a.TABLE_NAME = UPPer('' || time_row.tablename || '');
     
     if num=1 and (i=1 or trim(v_tableName)<>trim(time_row.tablename)) then
      dbms_output.put_line('11111111111111111111'); 
     --删除表
      execute immediate 'drop table '||time_row.tablename;
      --创建表
     execute immediate 'create table '||time_row.tablename||' (
                            id                     NUMBER(19) not null,
                            input_unit_id          NUMBER(19),
                            short_name             VARCHAR2(500),
                            unit_name              VARCHAR2(500),
                            warehouse_org_code     VARCHAR2(100),
                            material_belong        VARCHAR2(50),
                            product_name           VARCHAR2(500),
                            input_unit_name        VARCHAR2(100),
                            warehouse_id           VARCHAR2(100),
                            warehouse_name         VARCHAR2(300),
                            location_name          VARCHAR2(200),
                            entity_name            VARCHAR2(200),
                            material_cate_name     VARCHAR2(300),
                            product_model_name     VARCHAR2(500),
                            material_code          VARCHAR2(100),
                            material_name          VARCHAR2(500),
                            provider_product_code  VARCHAR2(100),
                            material_property_name VARCHAR2(500),
                            is_main_product        VARCHAR2(100),
                            provider_product_name  VARCHAR2(350),
                            provider_short_name    VARCHAR2(150),
                            measure_name           VARCHAR2(300),
                            total_amount           NUMBER(18,2),
                            total_money            NUMBER(18,2),
                            preempt_amount         NUMBER(18,2),
                            age                    NUMBER(18,1),
                            first_input_date       DATE,
                            account_cate_name      VARCHAR2(150),
                            cur_date               DATE,
                            site_code              VARCHAR2(300),
                            site_name              VARCHAR2(300),
                            project_code           VARCHAR2(512),
                            project_name           VARCHAR2(300),
                            location_id            VARCHAR2(100),
                            warehouse_belong       VARCHAR2(100),
                            is_main_product_id     VARCHAR2(100),
                            material_cate_id       VARCHAR2(100),
                            provider_id            VARCHAR2(100),
                            material_property_id   VARCHAR2(100),
                            is_barcode_control     VARCHAR2(100),
                            provider_name          VARCHAR2(350),
                            warehouse_org_name     VARCHAR2(300),
                            dilivery_location      VARCHAR2(50),
                            product_codes_id       NUMBER(19),
                            input_date             DATE,
                            input_detail_id        NUMBER(19)
                         )
                         tablespace WZGL_DATA01
                            pctfree 10
                            initrans 1
                            maxtrans 255
                            storage
                            (
                              initial 64K
                              minextents 1
                              maxextents unlimited
                            )';
              
     end if;
     
     if num<>1 then
       execute immediate 'create table '||time_row.tablename||' (
                                id                     NUMBER(19) not null,
                                input_unit_id          NUMBER(19),
                                short_name             VARCHAR2(500),
                                unit_name              VARCHAR2(500),
                                warehouse_org_code     VARCHAR2(100),
                                material_belong        VARCHAR2(50),
                                product_name           VARCHAR2(500),
                                input_unit_name        VARCHAR2(100),
                                warehouse_id           VARCHAR2(100),
                                warehouse_name         VARCHAR2(300),
                                location_name          VARCHAR2(200),
                                entity_name            VARCHAR2(200),
                                material_cate_name     VARCHAR2(300),
                                product_model_name     VARCHAR2(500),
                                material_code          VARCHAR2(100),
                                material_name          VARCHAR2(500),
                                provider_product_code  VARCHAR2(100),
                                material_property_name VARCHAR2(500),
                                is_main_product        VARCHAR2(100),
                                provider_product_name  VARCHAR2(350),
                                provider_short_name    VARCHAR2(150),
                                measure_name           VARCHAR2(300),
                                total_amount           NUMBER(18,2),
                                total_money            NUMBER(18,2),
                                preempt_amount         NUMBER(18,2),
                                age                    NUMBER(18,1),
                                first_input_date       DATE,
                                account_cate_name      VARCHAR2(150),
                                cur_date               DATE,
                                site_code              VARCHAR2(300),
                                site_name              VARCHAR2(300),
                                project_code           VARCHAR2(512),
                                project_name           VARCHAR2(300),
                                location_id            VARCHAR2(100),
                                warehouse_belong       VARCHAR2(100),
                                is_main_product_id     VARCHAR2(100),
                                material_cate_id       VARCHAR2(100),
                                provider_id            VARCHAR2(100),
                                material_property_id   VARCHAR2(100),
                                is_barcode_control     VARCHAR2(100),
                                provider_name          VARCHAR2(350),
                                warehouse_org_name     VARCHAR2(300),
                                dilivery_location      VARCHAR2(50),
                                product_codes_id       NUMBER(19),
                                input_date             DATE,
                                input_detail_id        NUMBER(19)
                              )
                              tablespace WZGL_DATA01
                            pctfree 10
                            initrans 1
                            maxtrans 255
                            storage
                            (
                              initial 64K
                              minextents 1
                              maxextents unlimited
                            )';
              
        
     end if; 
   
      v_tableName := time_row.tablename;
  
    --动态删除tableName中的curDay的数据
    execute immediate 'delete from ' || time_row.tablename ||
                      ' t where t.cur_date=to_date(' || time_row.curday ||
                      ',''yyyy-mm-dd'')';
    commit;
    
     
    --重新插入删除的数据
    pro_scm_stockagereport_month(time_row.tablename, time_row.curday);
    commit;
    
    i := i+1;
  end loop;

end;


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值