db2 存储过程 语法 及结果集查询
第一次用存储过程,关于处理待办的,不知道怎么执行和传参数 给存储过程 ,其实就一句话很简单。
@call PRC_MISSIONLIST_QUERY('27020214', '27040000', '27040900'); 或者call PRC_MISSIONLIST_QUERY('27020214', '27040000', '27040900');
其中的三个参数其实就是存储过程中的in 参数。
存储过程很复杂慢慢看。
(IN | OUT | INOUT parameter-name data-type,...) :传入参数
IN:输入参数
OUT:输出参数
INOUT:作为输入输出参数
parameter-name:参数名字,在此存储过程中唯一的标识符。
data-type:参数类型,可以接收SQL类型和创建的表。不支持LONG VARCHAR, LONG VARGRAPHIC, DATALINK, REFERENCE和用户自定义类型。
SPECIFIC specific-name:唯一的特定名称(别名),可以用存储过程名代替,这个特定名称用于dorp存储过程,或者给存储过程添加注视用,但不能调用存储过程。如果不指定,则数据库会自动生成一个yymmddhhmmsshhn时间戳的名字。推荐给出别名。
DYNAMIC RESULT SETS integer:指定存储过程返回结果的最大数量。存储过程中虽然没有return语句,但是却能返回结果集。
CONTAINS SQL, READS SQL DATA, MODIFIES SQL DATA: 指定存储过程中的SQL访问级别
CONTAINS SQL: 表示存储过程可以执行中,既不可读取 SQL 数据,也不可修改 SQL 数据。
READS SQL DATA: 表示存储过程可以执行中,可读取SQL,但不可修改 SQL 数据。
MODIFIES SQL DATA: 表示存储过程可以执行任何 SQL 语句。可以对数据库中的数据进行增加、删除和修改。
DETERMINISTIC or NOT DETERMINISTIC:表示存储过程是动态或者非动态的。动态的返回的值是不确定的。非动态的存储过程每次执行返回的值是相同的。
CALLED ON NULL INPUT:表示可以调用存储过程而不管任何的输入参数是否为NULL,并且,任何的OUT或者INOUT参数可以返回一个NULL或者非空值。检验参数是否为NULL是在过程中进行的。
INHERIT SPECIAL REGISTERS:表示继承专用寄存器。
OLD SAVEPOINT LEVEL or NEW SAVEPOINT LEVEL:建立存储点。OLD SAVEPOINT LEVEL是默认的存储点。
LANGUAGE SQL:指定程序的主体用的是SQL语言。
EXTERNAL ACTION or NO EXTERNAL ACTION:表示存储过程是否执行一些改变理数据库状态的活动,而不通过数据库管理器管。默认是 EXTERNAL ACTION。如果指定为NO EXTERNAL ACTION ,则数据库会确定最最佳优化方案。
PARAMETER CCSID:指定所有输出字符串数据的编码,默认为UNICODE编码数据库为PARAMETER CCSID UNICODE ,其他的数据库默认为PARAMETER CCSID 3 ASCII。
SQL-procedure-body:存储过程的主体
----------SQL-variable-declaration:变量声明
CREATE PROCEDURE "TRAINING"."PRC_MISSIONLIST_QUERY" (
IN "V_EMPLOYEEID" VARCHAR(60),
IN "V_UPPERUNIT2" VARCHAR(60),
IN "V_UPPERUNIT3" VARCHAR(60) )
SPECIFIC "SQL121009165611600"
DYNAMIC RESULT SETS 2
LANGUAGE SQL
NOT DETERMINISTIC
NO EXTERNAL ACTION
READS SQL DATA
OLD SAVEPOINT LEVEL
begin
declare V_SORT varchar(4) default '';
declare v_isCourseAdmain integer default 0; --其它 待办 信息
other:begin
DECLARE other_list CURSOR WITH RETURN TO CALLER for /* 考试待办信息*/
select tm.seqcode flowid,'部门考试('||tet.EVALUATE_NAME||')' topic ,tm.created_time limitdate,tet.EVALUATE_SEQCODE flowNum,tm.end_time endDate,
'UTY' flowtype,'3' coalitionflag, '学员' upuserrole,0 missionlistId,(tm.created_time+ 2 day) endDate,
case when (tm.created_time + 2 day) <= current timestamp then 1 else 0 end as status
from
TRAINING.TRAINING_EVALUATE tet
inner join TRAINING.TRAINING_MAIN tm on tm.seqcode=tet.TRAINING_SEQCODE
inner join TRAINING.TRAINING_PEPINFO tpi on tpi.TRAINING_SEQCODE=tm.seqcode
where
tm.del_time is null and (tm.STATE='0' or tm.state='3')
and tm.kind='5' and tpi.pep_state='1'
and (tpi.state='0' or tpi.state='2' or tpi.state='3')
and tpi.join_flag='N'
and tpi.PEP_ID=V_EMPLOYEEID
and current timestamp between tm.start_time and tm.end_time;
open other_list;
end other;
/*判断 用户是否有 课程管理员 权限*/
select count(er.SEQCODE) into v_isCourseAdmain from
TRAINING.EMPLOYEE_ROLEINFO er
inner join TRAINING.ROLEINFO rlf on rlf.SEQCODE = er.EMPLOYEE_ROLE
where rlf.ROLE_NAME='课程管理员' and rlf.AVI_FLAG='1' and rlf.DEL_TIME is null and er.EMPLOYEE_ID =V_EMPLOYEEID and er.CROUSE_SORT_CODE is not null ;
if v_isCourseAdmain > 0 then
select max(er.CROUSE_SORT_CODE) into V_SORT from EMPLOYEE_ROLEINFO er where er.EMPLOYEE_ID = V_EMPLOYEEID;
end if;
/*查询 用户 待办*/
cur:begin
DECLARE missionlist_list CURSOR WITH RETURN TO CALLER for
select ml.FLOWOID flowid,ml.MISSIONLISTOID missionlistid, ml.FLOWNUM flownum,ml.USERROLEOID userroleoid,ml.UPUSERROLE upuserrole, ml.TOPIC topic,ml.USEPAGEURL url,ml.FLOWFLAG flowtype,ml.UPPERNAME uppername,ml.MISSIONDATE limitdate,(ml.MISSIONDATE + ml.DAYS_NUM day) endDate,
case when (ml.MISSIONDATE + ml.DAYS_NUM day)<= current date then 1 else 0 end as status, ml.COALITION_FLAG coalitionflag,value(ri.seqcode,5) rolenum
from MISSIONLIST_VIEW ml
left join roleinfo ri on ml.USERROLEOID = ri.ROLE_NAME
where (ml.useroid = V_EMPLOYEEID OR ml.USEROID = '0')
AND (ml.upperunit2 = V_UPPERUNIT2 or ml.pepkind = '1')
AND ( ( '' <> concat(V_UPPERUNIT3,'')
AND concat(V_UPPERUNIT3,'') not in ('27000043','27000066')
AND (ml.upperunit3 = V_UPPERUNIT3 or ml.pepkind != '3') ) OR 1=1 )
AND (
EXISTS (
select eri.EMPLOYEE_ROLE from EMPLOYEE_ROLEINFO eri
where eri.EMPLOYEE_ID=V_EMPLOYEEID AND ri.SEQCODE = eri.EMPLOYEE_ROLE AND
(eri.UNIT_TWO_CODE=V_UPPERUNIT2 OR (eri.UNIT_THREE_CODE=V_UPPERUNIT3 AND eri.UNIT_TWO_CODE=V_UPPERUNIT2)) ) OR ml.USERROLEOID = '学员' ) AND
NOT EXISTS(
select 1 from Missionlist_pep b where b.ml_seqcode = ml.Missionlistoid AND ( (ml.USERROLEOID='课程管理员'
AND ml.FLOWFLAG NOT IN ('NCLF')
AND EXISTS(
select employee_id from EMPLOYEE_ROLEINFO dd where dd.EMPLOYEE_ID=b.PEP_CODE
AND dd.CROUSE_SORT_CODE= V_SORT ) )
OR (
/*ml.USERROLEOID <> '课程管理员' AND (
*/ b.pep_code = V_EMPLOYEEID OR (b.PEP_CODE = '0' AND (
b.unit_twocode = V_UPPERUNIT2 ||','|| V_UPPERUNIT3 OR b.unit_twocode = V_UPPERUNIT2 ||',')) ) )AND ml.FLOWFLAG not in ('CP','RGC') ) AND
NOT EXISTS(
SELECT b.unit_twocode FROM Missionlist_pep b
INNER JOIN Missionlist c ON b.ML_SEQCODE = c.Missionlistoid
WHERE c.userroleoid = '二级培训管理员' AND c.display_flag = '1' AND c.sparenum = 1 AND ml.USERROLEOID = '学员'
and ml.flowflag=c.flowflag AND ml.flowoid = c.flowoid AND b.UNIT_TWOCODE=V_UPPERUNIT2||',' )
AND( ( ml.OBJ_UNITS is NOT NULL AND ( ( ml.OBJ_UNITS like concat('%',concat(V_UPPERUNIT2,'%'))
AND ml.USERROLEOID<>'二级培训管理员' AND ml.PEPKIND ='1'
-- AND ml.OBJ_UNITS like '%27220000%' ) OR ( ml.USERROLEOID ='二级培训管理员' AND ml.PEPKIND ='1' AND ml.OBJ_UNITS like concat('%',concat(V_UPPERUNIT2,'%')) AND EXISTS ( select aa.OBJ_UNITS from MISSIONLIST aa
left join MISSIONLIST bb on aa.BACKMISOID=bb.MISSIONLISTOID
where EXISTS ( select bbb.BACKMISOID from MISSIONLIST aaa left join MISSIONLIST bbb on aaa.BACKMISOID=bbb.MISSIONLISTOID where bbb.ISBACK=1 AND bbb.UPUSERROLE='课程管理员' AND aaa.MISSIONLISTOID=ml.MISSIONLISTOID AND bb.BACKMISOID=bbb.BACKMISOID ) AND aa.OBJ_UNITS like concat('%',concat(V_UPPERUNIT2,'%')) ) )
OR(
ml.flowflag = 'CP' AND ml.OBJ_UNITS like concat('%',concat(V_UPPERUNIT2,'%')) AND ml.PEPKIND ='1' ) OR ( ml.pepkind ='2' AND ml.obj_units like concat('%',concat(V_UPPERUNIT3,'%')) ) ) ) OR ml.obj_units is null OR (ml.USERROLEOID='系统管理员' AND ml.FLOWNUM=10) ) OPEN missionlist_list ; -- commit; end cur; end
db2 存储过程 语法 及结果集查询的更多相关文章
- DB2存储过程语法规则
如何声明一个存储过程CREATE PROCEDURE 存储过程名(IN 输入变量名 输入变量类型,OUT 输出变量名 输出变量类型)紧跟其后的是存储过程属性列表 常用的有:LAN ...
- 《Entity Framework 6 Recipes》中文翻译系列 (14) -----第三章 查询之查询中设置默认值和存储过程返回多结果集
翻译的初衷以及为什么选择<Entity Framework 6 Recipes>来学习,请看本系列开篇 3-6在查询中设置默认值 问题 你有这样一个用例,当查询返回null值时,给相应属性 ...
- Oracle存储过程语法
原文链接:http://www.jb51.net/article/31805.htm Oracle存储过程基本语法 存储过程 1 CREATE OR REPLACE PROCEDURE 存储过程名 ...
- db2存储过程
一. 使用存储过程的好处 1. 减少客户机与服务器之间的网络使用率,以及数据库锁定保持的时间 应用程序通常在执行每个SQL语句都要跨网络两次,存储过程可以将SQL语句集中在一起, 从而使得对于每一组S ...
- SQLSERVER存储过程语法的具体解释
SQL SERVER存储过程语法: Create PROC [ EDURE ] procedure_name [ ; number ] [ { @parameter data_type } ...
- SQLSERVER存储过程语法详解
CREATE PROC [ EDURE ] procedure_name [ ; number ] [ { @parameter data_type } [ VARYING ] [ = default ...
- SQLSERVER存储过程语法具体解释
SQL SERVER存储过程语法: Create PROC [ EDURE ] procedure_name [ ; number ] [ { @parameter data_type } ...
- 怎样提高DB2存储过程性能
高性能的SQL过程是数据库开发人员所追求的,我将不断把学到的,或在实际开发中用到的一些提高SQL过程性能的技巧整理出来,温故而知新. 1,在只使用一条语句即可做到时避免使用多条语句 让我们从一个简单的 ...
- [转]Oracle 存储过程语法
转自:http://www.cnblogs.com/chuncn/archive/2009/04/29/1381282.html 存储过程 1 CREATE OR REPLACE PROCEDURE ...
随机推荐
- [Js]评分星星
效果: 鼠标移到星星上,这颗星星及之前的全亮,提示文字出现,根绝星星数量显示不同文字,移出灭掉,文字消失 思路: 1.定义一个数组,来存放不同的文字 2.存放星星的索引值(要在i定义赋值后,即在for ...
- Fair Photography
题目大意: 给出直线上N个点的位置和颜色(0或1),求最大的区间,使得区间内0的个数大于等于1的个数且0的个数减去1的个数为偶数. 解题过程: 1.先贴个lsdsjy大牛的线段树的做法:http:// ...
- Highcharts导出gb2312乱码问题
Highcharts是utf-8编码的,其本地的.net导出环境也是utf-8格式的,导致网页如果采用gb2312编码,显示正常,导出就乱码了.这种现象也同样经常出现在ajax的使用过程中. ajax ...
- 框架之 spring
spring有两大特性,其一为ioc,其二为aop 1.ioc的理解 ioc为依赖注入,他的好处就是把创建对象的权利交给spring去管理,这样的好处是 将应用程序中的对象解耦,传统的方式程序中的对象 ...
- 【转发】centos 7安装完后出现please make your choice from '1' ......
PS:出现以上信息,是要求你阅读或者接收协议: Initial setup of CentOS Linux 7 (core)解决步骤如下: 1,输入[1],按Enter键阅读许可协议,2,输入[2], ...
- c#图像处理入门(-bitmap类和图像像素值获取方法) 转
一.Bitmap类 Bitmap对象封装了GDI+中的一个位图,此位图由图形图像及其属性的像素数据组成.因此Bitmap是用于处理由像素数据定义的图像的对象.该类的主要方法和属性如下: 1. GetP ...
- SwipeRefreshLayout
也许之前下拉刷新你可能会用到一些第三方开源库,如PullToRefresh, ActionBar-PullToRefresh.XlistView等 但现在已经有官方的组件了---SwipeRefres ...
- linux基础命令学习(四)计划任务
一.计划任务 crond服务简介 linux任务调度的工作主要分为以下两类: *系统执行的工作:系统周期性所要执行的工作,如备份系统数据.清理缓存 *个人执行的工作:某个用户定期要做的工作,例如每隔1 ...
- Java容器类接口:Iterator,Collection,Map
Iterator Iterator被称为迭代器,是一个对象,它的工作是遍历并选择序列中的对象,可以实现以下一些操作: 使用方法iterator()要求容器返回一个Iterator,Iterator将返 ...
- “Compiled” Python files
To speed up loading modules, Python caches the compiled version of each module in the __pycache__ di ...