orcale_proceduie_function_两三栗
--获取部门树
procedure:
create or replace procedure P_UTIL_TREE_ALL(P_APPL_NAME in VARCHAR2,
P_HIERARCHY_TYP in VARCHAR2,
TREETYPE in varchar2,
P_CUR OUT SYS_REFCURSOR) is
begin
OPEN P_CUR FOR
with v_util_tree as
(select h.EQ_NAME, h.PARENT_EQ_NAME, e.Typ, e.Dscr, h.seq
from IP_EQUIP_HIERARCHY h
inner join IP_EQ e
on h.Eq_Name = e.Eq_Name
where APPL_NAME = P_APPL_NAME
AND HIERARCHY_TYP = P_HIERARCHY_TYP
and e.typ <> 'TANK'
and e.typ <> 'LGTANK'
and e.typ <> 'POST'
union all
select 'NO_ASSIGNED', '$ASSET', null, '未分配', NULL as seq
from dual
union all
select EQ_NAME, '0', Typ, Dscr, 0 as seq
from IP_EQ
where EQ_NAME = '$ASSET')
SELECT DSCR as TEXT, EQ_NAME as ID, PARENT_EQ_NAME, TYP,SEQ
FROM v_util_tree A
START WITH A.PARENT_EQ_NAME = TREETYPE
CONNECT BY prior A.EQ_NAME = A.PARENT_EQ_NAME
order by SEQ;
end P_UTIL_TREE_ALL;
CREATE OR REPLACE PROCEDURE A_MEAS_MIINSP_PLAN_UPDATE
AS
vs_msg VARCHAR2(4000);
log_body VARCHAR2(400);
log_body2 VARCHAR2(400);
updatecount number;
plancodes varchar2(1000);
codeday VARCHAR2(40); --前几天
cur_1 SYS_REFCURSOR; --声明游标变量
v_plan_code VARCHAR2(400); --当前plancode
v_plan_name VARCHAR2(400); --当前planname
BEGIN
insert into a_meas_miinsp_log(CREATE_DATE,BODY,EXECUTE,LOGTYPE) values(sysdate,'开始执行A_MEAS_MIINSP_PLAN_UPDATE存储过程','execute','A_MEAS_MIINSP_PLAN_UPDATE');
--定义游标(简单的说就是一个可以遍历的结果集)
select A_DICS.Code into codeday
from A_DICS
inner join a_Diccategory on A_DICS.Categoryid = a_Diccategory.Keyid
where A_DICS.Status = 1 and a_Diccategory.Code = 'MEAS_RecycleDay' and A_DICS.title ='检定';
if(codeday is null)
then
begin
insert into a_meas_miinsp_log(CREATE_DATE,BODY,EXECUTE,LOGTYPE) values(sysdate,'数据字典中不存在配置单据回收天数','execute','A_MEAS_MIINSP_PLAN_UPDATE');
insert into a_meas_miinsp_log(CREATE_DATE,BODY,EXECUTE,LOGTYPE) values(sysdate,'结束执行A_MEAS_MIINSP_PLAN_UPDATE存储过程','execute','A_MEAS_MIINSP_PLAN_UPDATE');
commit;
return;
end;
end if;
open cur_1 for
--CURSOR cur_1 IS
select plan_code,plan_name from a_meas_miinsp_plan
where
--create_date < to_date(to_char(sysdate - interval codeday day,'yyyy-mm-dd'),'yyyy-mm-dd')
to_date(to_char(create_date,'yyyy-mm-dd'),'yyyy-mm-dd') <= to_date(to_char(sysdate -codeday,'yyyy-mm-dd'),'yyyy-mm-dd')
and report_state in (1,2);
loop
FETCH cur_1 into v_plan_code,v_plan_name;
EXIT WHEN cur_1%NOTFOUND;
update a_meas_instru_ccount a set
a.mi_status=(
select b.old_mi_status from a_meas_miinsp_detail b where
b.plan_code=v_plan_code and
b.mi_id=a.mi_id )
,operatedate=sysdate,operateuser='sysadmin'
where exists (
select b.old_mi_status from a_meas_miinsp_detail b where
b.plan_code=v_plan_code and
b.mi_id=a.mi_id);
log_body :='修改'||v_plan_name||'检定计划下器具状态为原来状态.';
plancodes:=plancodes||v_plan_code||',';
insert into a_meas_miinsp_log(CREATE_DATE,BODY,EXECUTE,LOGTYPE) values(sysdate,log_body,'update','A_MEAS_MIINSP_PLAN_UPDATE+A_MEAS_INSTRU_CCOUNT');
END LOOP;
select count(*) into updatecount from a_meas_miinsp_plan
where
--create_date < to_date(to_char(sysdate - interval codeday day,'yyyy-mm-dd'),'yyyy-mm-dd')
to_date(to_char(create_date,'yyyy-mm-dd'),'yyyy-mm-dd') <= to_date(to_char(sysdate -codeday,'yyyy-mm-dd'),'yyyy-mm-dd')
and report_state in (1,2) ;
if(updatecount>0)
then
--更新检定计划表中的三天前的编制状态记录为 已回收 状态
--update a_meas_miinsp_plan set report_state=7 where create_date < to_date(to_char(sysdate - interval codeday day,'yyyy-mm-dd'),'yyyy-mm-dd');
update a_meas_miinsp_plan set report_state=7,change_time=sysdate,change_userid='sysadmin' where to_date(to_char(create_date,'yyyy-mm-dd'),'yyyy-mm-dd') <= to_date(to_char(sysdate -codeday,'yyyy-mm-dd'),'yyyy-mm-dd')
and report_state in (1,2) ;
--添加日志
log_body2 :='修改'||updatecount||'条编制状态的检定计划:'||plancodes;
insert into a_meas_miinsp_log(CREATE_DATE,BODY,EXECUTE,LOGTYPE) values(sysdate,log_body2,'update','A_MEAS_MIINSP_PLAN_UPDATE+A_MEAS_MIINSP_PLAN');
end if;
insert into a_meas_miinsp_log(CREATE_DATE,BODY,EXECUTE,LOGTYPE) values(sysdate,'结束执行A_MEAS_MIINSP_PLAN_UPDATE存储过程','execute','A_MEAS_MIINSP_PLAN_UPDATE');
COMMIT;
EXCEPTION
WHEN OTHERS THEN
vs_msg := 'ERROR IN A_MEAS_MIINSP_PLAN_UPDATE '||SUBSTR(SQLERRM,1,500);
ROLLBACK;
--添加日志
insert into a_meas_miinsp_log(CREATE_DATE,BODY,EXECUTE,LOGTYPE) values(sysdate,vs_msg,'update','A_MEAS_MIINSP_PLAN_UPDATE');
COMMIT;
RETURN;
End;
CREATE OR REPLACE PROCEDURE A_MEAS_MIINSP_PLAN_CREATE
AS
vs_msg VARCHAR2(4000);
p_PERIODTYPE number; --周期类型
p_ISAUTOCRATEPLAN number; --是否自动创建
p_PERIODVALUE number; --周期值
p_LASTEXECURTDATE DATE; --上次执行日期
p_NEXTEXECURTDATE DATE; --下次执行日期
p_count number; --自动创建的器具数量
p_current_ym varchar2(50); --当前年月
p_maxnum number; --检定计划最新的编号
p_new_plancode number; --检定计划新编号
p_msg varchar2(1000); --日志信息
v_instrun SYS_REFCURSOR; --声明游标变量
v_group_org_id_cursor SYS_REFCURSOR;
v_group_org_id varchar2(100);
v_mi_id number;
v_MI_STATUS varchar2(100);
v_mi_org_id varchar2(100);
v_insdate DATE; --检定日期
p_updatemiids varchar2(1000);
p_insertplancode varchar2(1000);
config_count number; --配置表数量
current_dscr varchar2(200); --当前单位
new_plan_name varchar2(200); --当前新计划名称
begin
insert into a_meas_miinsp_log(CREATE_DATE,BODY,EXECUTE,LOGTYPE) values(sysdate,'开始执行A_MEAS_MIINSP_PLAN_CREATE存储过程','execute','A_MEAS_MIINSP_PLAN_CREATE');
select count(*) into config_count from a_meas_miinsp_config;
--判断是否自动创建
if(config_count<1) then
begin
insert into a_meas_miinsp_log(CREATE_DATE,BODY,EXECUTE,LOGTYPE) values(sysdate,'A_MEAS_MIINSP_CONFIG不存在记录','execute','A_MEAS_MIINSP_PLAN_CREATE');
insert into a_meas_miinsp_log(CREATE_DATE,BODY,EXECUTE,LOGTYPE) values(sysdate,'结束执行A_MEAS_MIINSP_PLAN_CREATE存储过程','execute','A_MEAS_MIINSP_PLAN_CREATE');
commit;
return;
end;
end if;
--获取配置表中的数据
select PERIODTYPE,ISAUTOCRATEPLAN,PERIODVALUE,LASTEXECURTDATE into p_PERIODTYPE, p_ISAUTOCRATEPLAN,p_PERIODVALUE, p_LASTEXECURTDATE from a_meas_miinsp_config;
if( p_ISAUTOCRATEPLAN=0) then
Begin
insert into a_meas_miinsp_log(CREATE_DATE,BODY,EXECUTE,LOGTYPE) values(sysdate,'A_MEAS_MIINSP_CONFIG表记录配置不需要自动创建记录','execute','A_MEAS_MIINSP_PLAN_CREATE');
insert into a_meas_miinsp_log(CREATE_DATE,BODY,EXECUTE,LOGTYPE) values(sysdate,'结束执行A_MEAS_MIINSP_PLAN_CREATE存储过程','execute','A_MEAS_MIINSP_PLAN_CREATE');
commit;
return;
end;
end if;
if(p_PERIODTYPE=1)
then
begin
--获取下次执行日期
if(p_LASTEXECURTDATE is null)
then
--设置最后更新的日期为当前时间,和下次更新时间
p_LASTEXECURTDATE:=to_date(to_char(SYSDATE,'yyyy-mm-dd') ,'yyyy-mm-dd');
p_NEXTEXECURTDATE:=to_date(to_char(ADD_MONTHS(trunc(sysdate,'mm'), p_PERIODVALUE),'yyyy-mm-dd') ,'yyyy-mm-dd');
else
p_NEXTEXECURTDATE:=to_date( to_char(ADD_MONTHS(p_LASTEXECURTDATE, p_PERIODVALUE),'yyyy-MM-dd'),'yyyy-mm-dd');
--SELECT to_char(ADD_MONTHS(p_LASTEXECURTDATE, p_PERIODVALUE),'yyyy-MM-dd') INTO p_NEXTEXECURTDATE FROM DUAL;
end if;
end;
end if;
p_count:=0;
--判断当前时间是否大于最后执行的时间
if(p_LASTEXECURTDATE <=to_date(to_char(SYSDATE,'yyyy-mm-dd') ,'yyyy-mm-dd'))
then
begin
--定义游标
--declare v_instrun_1 cursor for select mi_id,MI_STATUS,mi_org_id from a_meas_instru_ccount where VERIFICTION_DATE BETWEEN p_LASTEXECURTDATE AND p_NEXTEXECURTDATE AND MI_STATUS IN ('1','4');
--定义游标
OPEN v_instrun FOR
select mi_id,MI_STATUS,mi_org_id,VERIFICTION_DATE from a_meas_instru_ccount where VERIFICTION_DATE BETWEEN p_LASTEXECURTDATE AND p_NEXTEXECURTDATE AND MI_STATUS IN ('1','4') AND VERIFICTION_PLANT=0;
--定义游标
--declare v_group_org_id_cursor_1 cursor for select mi_org_id from a_meas_instru_ccount where VERIFICTION_DATE BETWEEN p_LASTEXECURTDATE AND p_NEXTEXECURTDATE AND MI_STATUS IN ('1','4')
-- group by mi_org_id ;
open v_group_org_id_cursor FOR
select mi_org_id from a_meas_instru_ccount where VERIFICTION_DATE BETWEEN p_LASTEXECURTDATE AND p_NEXTEXECURTDATE AND MI_STATUS IN ('1','4') AND VERIFICTION_PLANT=0
group by mi_org_id ;
--获取总记录数
select count(*) into p_count from a_meas_instru_ccount where VERIFICTION_DATE BETWEEN p_LASTEXECURTDATE AND p_NEXTEXECURTDATE AND MI_STATUS IN ('1','4') AND VERIFICTION_PLANT=0;
end;
else
begin
insert into a_meas_miinsp_log(CREATE_DATE,BODY,EXECUTE,LOGTYPE) values(sysdate,'本次检定周期时间大于当前时间','execute','A_MEAS_MIINSP_PLAN_CREATE');
insert into a_meas_miinsp_log(CREATE_DATE,BODY,EXECUTE,LOGTYPE) values(sysdate,'结束执行A_MEAS_MIINSP_PLAN_CREATE存储过程','execute','A_MEAS_MIINSP_PLAN_CREATE');
commit;
return;
end;
end if;
if(p_count>0)
then
p_updatemiids:='更新器具台帐表的状态:';
p_insertplancode:='新增检定计划明细表:';
loop
FETCH v_group_org_id_cursor into v_group_org_id;
EXIT WHEN v_group_org_id_cursor%NOTFOUND;
p_current_ym := TO_CHAR(SYSDATE,'yyyymm');
select max(substr(plan_code,length(plan_code)-3,4))+1 into p_maxnum
from A_MEAS_MIINSP_PLAN
where plan_code like '%'||p_current_ym||'%';
if(p_maxnum is null)
then
p_new_plancode:= p_current_ym||'0001';
elsif (length(p_maxnum)=1)
then
p_new_plancode:= p_current_ym||'000'||p_maxnum;
elsif (length(p_maxnum)=2)
then
p_new_plancode:= p_current_ym||'00'||p_maxnum;
elsif (length(p_maxnum)=3)
then
p_new_plancode:= p_current_ym||'0'||p_maxnum;
elsif (length(p_maxnum)=4)
then
p_new_plancode:= p_current_ym||p_maxnum;
end if;
--新增检定计划表
SELECT dscr into current_dscr FROM V_MEAS_DEPT where EQ_NAME = v_group_org_id;
new_plan_name:='自动创建计划:'||current_dscr;
INSERT INTO A_MEAS_MIINSP_PLAN (
PLAN_CODE, REPORT_STATE,STYPE,CREATE_DATE,
PLAN_ORGID, PLAN_NAME, CREATE_TYPE,change_time,Change_Userid)
VALUES (
p_new_plancode, 2,1,sysdate,
v_group_org_id,new_plan_name,1 ,sysdate,'sysadmin');
p_msg:='新增检定计划表:'||p_new_plancode||',组织机构ID:'||v_group_org_id;
insert into a_meas_miinsp_log(CREATE_DATE,BODY,EXECUTE,LOGTYPE) values(sysdate,p_msg,'insert','A_MEAS_MIINSP_PLAN_CREATE+A_MEAS_MIINSP_PLAN');
p_insertplancode:='';
p_updatemiids:='';
open v_instrun for
select mi_id,MI_STATUS,mi_org_id,VERIFICTION_DATE from a_meas_instru_ccount where VERIFICTION_DATE BETWEEN p_LASTEXECURTDATE AND p_NEXTEXECURTDATE AND MI_STATUS IN ('1','4') AND VERIFICTION_PLANT=0;
loop
FETCH v_instrun into v_mi_id,v_MI_STATUS,v_mi_org_id,v_insdate;
EXIT WHEN v_instrun%NOTFOUND;
if(v_group_org_id=v_mi_org_id)
then
--新增检定计划明细表
INSERT INTO A_MEAS_MIINSP_DETAIL (
PLAN_CODE, MI_ID, CREATE_DATE,
OLD_MI_STATUS,INS_DATE
) VALUES (
p_new_plancode,v_mi_id,sysdate,
v_MI_STATUS,v_insdate
);
p_insertplancode:= p_insertplancode||',器具id:'||v_mi_id||',';
--更新器具台帐表的状态
UPDATE A_MEAS_INSTRU_CCOUNT SET MI_STATUS = 2,operatedate=sysdate,operateuser='sysadmin' WHERE MI_ID =v_mi_id;
p_updatemiids:=p_updatemiids||'器具id:'||v_mi_id||',';
end if;
END LOOP;
insert into a_meas_miinsp_log(CREATE_DATE,BODY,EXECUTE,LOGTYPE) values(sysdate,'计划编号:'||p_new_plancode||','||p_insertplancode,'insert','A_MEAS_MIINSP_PLAN_CREATE+A_MEAS_MIINSP_DETAIL');
insert into a_meas_miinsp_log(CREATE_DATE,BODY,EXECUTE,LOGTYPE) values(sysdate,p_updatemiids,'update','A_MEAS_MIINSP_PLAN_CREATE+A_MEAS_INSTRU_CCOUNT');
END LOOP;
CLOSE v_instrun; --关闭游标变量
CLOSE v_group_org_id_cursor; --关闭游标变量
--更新配置表中最后的更新日期
update a_meas_miinsp_config set LASTEXECURTDATE=p_NEXTEXECURTDATE;
insert into a_meas_miinsp_log(CREATE_DATE,BODY,EXECUTE,LOGTYPE) values(sysdate,'更新计量模块检定计划配置表的下次检定时间:'||p_NEXTEXECURTDATE,'execute','A_MEAS_MIINSP_PLAN_CREATE+A_MEAS_MIINSP_CONFIG');
end if;
--添加日志
insert into a_meas_miinsp_log(CREATE_DATE,BODY,EXECUTE,LOGTYPE) values(sysdate,'结束执行A_MEAS_MIINSP_PLAN_CREATE存储过程','execute','A_MEAS_MIINSP_PLAN_CREATE');
COMMIT;
EXCEPTION
WHEN OTHERS THEN
vs_msg := 'ERROR IN A_MEAS_MIINSP_PLAN_CREATE '||SUBSTR(SQLERRM,1,500);
ROLLBACK;
--添加日志
insert into a_meas_miinsp_log(CREATE_DATE,BODY,EXECUTE,LOGTYPE) values(sysdate,vs_msg,'execute','A_MEAS_MIINSP_PLAN_CREATE');
COMMIT;
RETURN;
end;
function:
create or replace function FN_GET_ROLES(v_user_id varchar2) return varchar2 is
type zy_emp_cursor is ref cursor;
v_emp_cursor zy_emp_cursor;
v_role_dscr varchar2(2000);
v_emp_dscr varchar2(64);
v_index number;
begin
open v_emp_cursor for SELECT A_ROLES.ROLE_DSCR
FROM A_PT_ROLES_USERS A_USERS
INNER JOIN A_PT_ROLES A_ROLES
ON A_USERS.ROLE_ID = A_ROLES.ROLE_ID
WHERE A_USERS.USER_ID = v_user_id;
v_index := 0;
loop
fetch v_emp_cursor into v_emp_dscr;
exit when v_emp_cursor%notfound;
if v_index = 0 then
begin
v_role_dscr := v_emp_dscr;
end;
else
v_role_dscr := v_role_dscr || ',' || v_emp_dscr;
end if;
v_index := v_index + 1;
end loop;
close v_emp_cursor;
return v_role_dscr;
end;
调用function:
--未分配此角色的用户
SELECT * FROM (
SELECT ROW_NUMBER() OVER (
order by U.USER_ID ASC
) AS TROW,U.*,T.DSCR, FN_GET_ROLES(U.USER_ID) AS ROLE_DSCR
FROM A_PT_USERS U
LEFT JOIN V_IP_EQ T
ON U.ORG=T.EQ_NAME
WHERE (org is null or org='')
AND NOT EXISTS (SELECT A_R_U.USER_ID
FROM A_PT_ROLES_USERS A_R_U
WHERE TRIM(UPPER(A_R_U.USER_ID)) = TRIM(UPPER(U.USER_ID))
AND A_R_U.ROLE_ID = 'sa')
) TT
WHERE TT.TROW BETWEEN {0} AND {1};
orcale_proceduie_function_两三栗的更多相关文章
- x01.TextProc: 两三分钟完成的一个小工具
在工作中,遇到这么个问题,需要将 Excel 表中类似 2134-1234-4456 的商品编号输入到单位的程序中,而程序只认 213412344456 这种没有 ‘-’ 的输入.数量比较多,一笔一笔 ...
- C#注释——爱你不是两三天
说到注释这个东东,我不得不说:爱你不是两三天,每天却想你很多遍...原来梁静茹同学这首歌不全然是情歌啊~ 一句注释也没有的一大片的代码有木有 看着那些无名者写的神秘代码,有没有骂一句,你妹的... ...
- 2星|《10W+走心文案是怎样炼成的》:标题党。实际是台湾创意总监的一些人生感悟和两三个很一般的创意文案
10W+走心文案是怎样炼成的 作者是台湾人,曾在台湾奥美担任创意总监,做过一些广告.本书是他的一些经验介绍. 总体来说是标题党,作者的广告基本是电视广告,跟文案也有关系,估计播放量也很容易过10W+, ...
- adb 的常见问题与处理办法两三
问题1:无法安装手机驱动, 解决方法:安装强大的豌豆荚,通常能都能解决问题 问题2: adb devices 时出现 adb devicesadb server is out of date. ki ...
- 网易云首席安全架构师谈安全新形势:DDOS两三天,游戏玩家数从几万降到几百
本文由 网易云发布. 安全是一个永恒的话题,在业务不断云化.攻击越来越复杂的当下,互联网安全呈现了出什么样的严峻形势?对这些形势,网易云又是如何应对的? 网易云首席安全架构师沈明星 4月13日,网易 ...
- 给学习Linux系统小白的两三个建议
前段时间看过一个针对国内Linux使用情况的调研表,有了不少感慨.现在听说过linux,会一点linux基本操作的人多如牛毛,然而真正能用linux做一点事情的确少之又少.无论是公司还是学校,办公基本 ...
- 阿里前CEO卫哲用自己10余年经历,倾诉B2B的三差、四率、两大坑
今日(12 月 28 日),嘉御基金创始人.阿里巴巴(B2B)前 CEO 卫哲在第三届中国 B2B 电子商务大会上进行了"B2B 冬天里的春天"的主题分享.他提出中国 B2B 行业 ...
- 记录一次MySQL两千万数据的大表优化解决过程,提供三种解决方案(转)
问题概述 使用阿里云rds for MySQL数据库(就是MySQL5.6版本),有个用户上网记录表6个月的数据量近2000万,保留最近一年的数据量达到4000万,查询速度极慢,日常卡死.严重影响业务 ...
- 一次MySQL两千万数据大表的优化过程,三种解决方案
问题概述 使用阿里云rds for MySQL数据库(就是MySQL5.6版本),有个用户上网记录表6个月的数据量近2000万,保留最近一年的数据量达到4000万,查询速度极慢,日常卡死.严重影响业务 ...
随机推荐
- PairRDD中算子foldByKey图解
foldByKey 函数原型: def foldByKey(zeroValue: V)(func: (V, V) => V): RDD[(K, V)] def foldByKey(zeroVal ...
- 安卓测试之---Monkey
Tip:在阅读此篇之前,请先了解ADB命令: http://www.cnblogs.com/pearl07/p/8572390.html 一.什么是Monkey Monkey是Android SDK提 ...
- jQuery的使用说明
jQuery是一款同prototype一样优秀js开发库类,特别是对css和XPath的支持,使我们写js变得更加方便!如果你不是个js高手又想写出优 秀的js效果,jQuery可以帮你达到目的! ...
- Uboot的bad_save_user_regs
下面是一个宏定义,从名字“bad_save_user_regs”就可以猜测它是用来保存程序“出错”时用户态的寄存器的值. 从下面的“use bad_save_user_regs for abort/p ...
- java.util.logging.Logger使用详解 (转)
http://lavasoft.blog.51cto.com/62575/184492/ ************************************************* java. ...
- Makefile初探
选择一个目录创建一个Makefile文件: 注意第二行的开头需要时TAB建空开,不要用空格 执行make make的时候,无论你创建的是makefile还是Makefile都可以识别 ,不在乎开头的字 ...
- python3打印26个英文字母
for a in range(ord('a'), ord('z') + 1): print(chr(a) , end="") for a in range(ord('A'), or ...
- JDBC 查询的三大参数 setFetchSize prepareStatement(String sql, int resultSetType, int resultSetConcur)
JDBC 查询的三大参数 本文转载至 http://blog.csdn.net/turkeyzhou/article/details/5115228 DBC1.0 .JDBC2.0 .JDBC3.0 ...
- FastDFS 安装步骤
nginx01 121nginx02 122 tracker01 131tracker02 132 storage01 141storage0 ...
- windows 搭建 subversion+TortoiseSVN
1.版本 (a)Apache 2.2.25:httpd-2.2.25-win32-x86-no_ssl.msi (b)Subversion:Setup-Subversion-1.8.5.msi (c) ...