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;