第一次用存储过程,关于处理待办的,不知道怎么执行和传参数 给存储过程 ,其实就一句话很简单。

@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 存储过程 语法 及结果集查询的更多相关文章

  1. DB2存储过程语法规则

    如何声明一个存储过程CREATE PROCEDURE 存储过程名(IN 输入变量名 输入变量类型,OUT 输出变量名 输出变量类型)紧跟其后的是存储过程属性列表            常用的有:LAN ...

  2. 《Entity Framework 6 Recipes》中文翻译系列 (14) -----第三章 查询之查询中设置默认值和存储过程返回多结果集

    翻译的初衷以及为什么选择<Entity Framework 6 Recipes>来学习,请看本系列开篇 3-6在查询中设置默认值 问题 你有这样一个用例,当查询返回null值时,给相应属性 ...

  3. Oracle存储过程语法

    原文链接:http://www.jb51.net/article/31805.htm Oracle存储过程基本语法 存储过程  1 CREATE OR REPLACE PROCEDURE 存储过程名  ...

  4. db2存储过程

    一. 使用存储过程的好处 1. 减少客户机与服务器之间的网络使用率,以及数据库锁定保持的时间 应用程序通常在执行每个SQL语句都要跨网络两次,存储过程可以将SQL语句集中在一起, 从而使得对于每一组S ...

  5. SQLSERVER存储过程语法的具体解释

    SQL SERVER存储过程语法: Create PROC [ EDURE ] procedure_name [ ; number ]     [ { @parameter data_type }   ...

  6. SQLSERVER存储过程语法详解

    CREATE PROC [ EDURE ] procedure_name [ ; number ] [ { @parameter data_type } [ VARYING ] [ = default ...

  7. SQLSERVER存储过程语法具体解释

    SQL SERVER存储过程语法: Create PROC [ EDURE ] procedure_name [ ; number ]     [ { @parameter data_type }   ...

  8. 怎样提高DB2存储过程性能

    高性能的SQL过程是数据库开发人员所追求的,我将不断把学到的,或在实际开发中用到的一些提高SQL过程性能的技巧整理出来,温故而知新. 1,在只使用一条语句即可做到时避免使用多条语句 让我们从一个简单的 ...

  9. [转]Oracle 存储过程语法

    转自:http://www.cnblogs.com/chuncn/archive/2009/04/29/1381282.html 存储过程 1  CREATE OR REPLACE PROCEDURE ...

随机推荐

  1. [开发笔记]-jQuery获取checkbox选中项等操作及注意事项

    今天在做一个项目功能时需要显示checkbox选项来让用户进行选择,由于前端不是很熟练,所以做了一个简单的Demo,其中遇到一些小问题,特记录下来,希望能帮到遇到类似问题的同学们. 1. 获取chec ...

  2. 【数论+技巧】神奇的Noip模拟试题第二试 T1 素数统计

    1.      素数统计 (pcount.pas/.c/.cpp) [问题描述] 小tan的老师揣谙戈给同学们布置了一道题,要求统计给定区间内素数的个数.“这不是很简单吗?”小tan忍不住说.揣谙戈冷 ...

  3. Noip2014 提高组 T2 联合权值 连通图+技巧

    联合权值 描述 无向连通图 G 有 n 个点,n-1 条边.点从 1 到 n 依次编号,编号为 i 的点的权值为 WiWi, 每条边的长度均为 1.图上两点(u, v)的距离定义为 u 点到 v 点的 ...

  4. "琳琅满屋"调查问卷 心得体会及结果分析

    ·关于心得体会       当时小组提出这个校园二手交易市场的时候,就确定了对象范围,仅仅是面向在校大学生,而且在我们之前就已经有了很多成功的商品交易的例子可以让我们去借鉴,再加上我们或多或少的有过网 ...

  5. JQery w3school学习第一章 标签的隐藏和显示

    鄙人初学JQuery,最关键的是JQuery获取标签对象的方式 这一章学习的是点击按钮让所有标签的文字以及标签栏的位置隐藏起来,因为单纯的隐藏文字,还是会有空格和空行的影响 这里最关键的代码就是 $( ...

  6. POJ 2104 静态找区间第k大

    静态区间第k大的问题,往往可以利用主席树来解决 这是主席树的第一道题 主席树大概可以理解为在n个节点上都建立一棵线段树,但是想想会超出内存 每一个节点保存的线段树都记录当前整段前缀区间的信息 但是因为 ...

  7. 戴文的Linux内核专题:04安全

    转自Linux中国 Linux内核是所有Linux系统的核心.如果有任何恶意代码控制或破害了内核的任何一部分,那么系统会严重受损,文件可能被删除或损坏,私人信息可能被盗等等.很明显,保持内核安全涉及到 ...

  8. DotNetBar v14.0.0.3 Fully Cracked

    更新信息: http://www.devcomponents.com/customeronly/releasenotes.asp?p=dnbwf&v=14.0.0.3 如果遇到破解问题可以与我 ...

  9. mybatis ForEach Collection集合等规范解析(转)

    转自:http://blog.csdn.net/wj3319/article/details/9025349 在SQL开发过程中,动态构建In集合条件查询是比较常见的用法,在Mybatis中提供了fo ...

  10. php的字符串处理

    字符串处理: strlen("aaa");取字符串的长度 *** strcmp("aaa","aaa");比较两个字符串,相同的话输出0,不 ...