oralcle 存储过程批处理

create or replace procedure typeHinD
as
cursor typeall is select id,name from tbl_en_type;   --查询出来所有分类
cursor hournum is select EN_VAL_ORG,EN_VAL_STD,EN_COST,UNIT_ID,SUPER_ID,INDS_ID,EN_TYPE_ID,STAND_COE from tbl_unit_en_type_hour
where to_date(sysdate-1,'dd-mon-yyyy')  = to_date(en_date,'dd-mon-yyyy');
typeAllid varchar2(32);
hourtype varchar2(32);
envalorg number;
envalstd  number;
encost number;
typeid varchar2(32);
flag number;
begin
envalstd :=0;
encost :=0;
envalorg :=0;
flag := 0;
 for typeAllid in typeall loop --循环所有类别
    begin
        --dbms_output.put_line(typeAllid.id);    
        typeid :=typeAllid.id;
        for hourtype in hournum loop  --循环所有小时表
            begin
              if(typeAllid.id=hourtype.EN_TYPE_ID)then
                begin
                  flag :=1;
                  dbms_output.put_line('nnnnnnnnnnnnn');
                  envalstd := envalstd + hourtype.EN_VAL_STD;
                  encost := encost + hourtype.EN_COST;
                  envalorg :=envalorg + hourtype.EN_VAL_ORG;
                  --dbms_output.put_line(envalstd);
                  --dbms_output.put_line(encost);
                end;
                end if;
            end;
            end loop;
            if(flag = 1)then
            begin
            INSERT INTO TBL_UNIT_EN_TYPE_DAY ( id,EN_VAL_ORG, EN_VAL_STD, UNIT_ID, SUPER_ID, INDS_ID, EN_TYPE_ID, EN_DATE, CREATED_DATE, CREATED_BY, CREATED_PRG_NM, UPDATED_DATE, UPDATED_BY, UPDATED_PRG_NM, MODIFY_COUNT, STAND_COE, COUNT_FLAG, EN_COST)

-- USER_SEQ.nextval  序列
            VALUES ( USER_SEQ.nextval,envalorg,envalstd , '402881043ad9b54f013ad9cd7d260008', '402881fa3a687abb013a688885f1000b', '402881ef3b5f0667013b5f082db60002',typeid , sysdate, sysdate, 'system', 'system', sysdate, 'system', 'system', '0', '0', '0', encost);
            COMMIT;
            flag :=0;     --复原flag      
            envalstd :=0;  --清空std值
            encost :=0;  -- 清空cost值
            envalorg :=0;  -- 清空org值
            end;
            end if;
     end;
  end loop;
end;

执行:set serveroutput on;
          execute typeHinD;

序列:CREATE SEQUENCE USER_SEQ
MINVALUE 1 --最小值
MAXVALUE 999999999999999999999999999  --最大值
INCREMENT BY 1 --用于定义序列的步长,如果省略,则默认为1,如果出现负值,则代表Oracle序列的值是按照此步长递减的
START WITH 41 --定义序列的初始值(即产生的第一个值),默认为1
CACHE 20   --定义存放序列的内存块的大小,默认为20。NOCACHE表示不对序列进行内存缓冲。对序列进行内存缓冲,可以改善序列的性能
NOORDER NOCYCLE ;  --表示当序列生成器的值达到限制值后是否循环。CYCLE代表循环,NOCYCLE代表不循环。如果循环,则当递增序列达到最大值时,循环到最小值;对于递减序列达到最小值

执行有输出的存储过程:

set serveroutput on;
declare
std number;
org number;
cost number;
begin
typeHinD(std,org,cost);
 dbms_output.put_line('envalstdall:'||std);
   dbms_output.put_line('encostall:'||org);
   dbms_output.put_line('envalorgall:'||cost);
end;

原文地址:https://www.cnblogs.com/mingtian521/p/3123554.html