SP:
CREATE PROCEDURE PROCESS_ADDNOTICE(IN RECORDOID BIGINT,
IN STARTERID BIGINT,
OUT RESULTSTATUS INTEGER,
OUT RESULTMSG VARCHAR(4000))
begin
--第三步 游标定义
--声明变量
--第四步 业务变量定义
--声明表字段变量
declare tempOid bigint default -1;
declare tempOperateTime timestamp;
declare tempOperator bigint;
declare tempYearly varchar(32);
declare tempNoticeName varchar(256);
declare tempReceiveUnitId bigint;
declare tempReceiveUnitName varchar(1024);
declare tempFileId bigint;
declare tempJobId varchar(256);
declare tempJobName varchar(1024) default '';
declare tempContext varchar(1024);
declare tempStartDate timestamp;
declare tempEndDate timestamp;
declare tempindex bigint;
declare tempvalue varchar(1024);
declare tempJobIdT varchar(256);
--第二步 异常变量、异常处理定义
--输出的错误信息和错误标志状态
declare SQLCODE integer default 0;
declare tempSQLCODE integer default 0;
--出错处理
declare continue handler for sqlexception,not found,sqlwarning
begin
set tempSQLCODE = SQLCODE;
end;
--第五步 业务数据查询
--查询申请源数据
select
C_OID,C_OPERATETIME,C_OPERATOR,C_YEARLY,C_NOTICENAME,C_RECEIVEUNITID,C_FILEID,C_JOBCODE,C_CONTEXT,C_STARTDATE,C_ENDDATE
into tempOid,tempOperateTime,tempOperator,tempYearly,tempNoticeName,tempReceiveUnitId,tempFileId,tempJobId,tempContext,tempStartDate,tempEndDate from TB_INF_ADDNOTICE where C_OID=RecordOID;
select C_NAME into tempReceiveUnitName from TB_ORG_ORGUNIT where C_OID_ORGUNIT = tempReceiveUnitId;
--select C_NAME into tempJobName from TB_ORG_ASSIGNEDJOB where C_OID_ASSIGNEDJOB = tempJobId;
--设置选拔岗位名称
set tempJobIdT = tempJobId;
while tempJobIdT is not null do
set tempindex = locate('|',tempJobIdT);
set tempvalue = (select a.C_NAME from tb_org_assignedjob a where char(a.C_OID_ASSIGNEDJOB) = SUBSTR(tempJobIdT,1,8));
set tempJobName = Concat(tempJobName,Concat(',',tempvalue));
if tempindex > 0 then
set tempJobIdT = SUBSTR(tempJobIdT,integer(tempindex+1)); end if;
if tempindex <= 0 then
set tempJobIdT = null;
end if;
end while;
----增加公告信息
insert into TB_PRE_POST (C_OID,C_YEAR,C_OPERATOR,C_OPERATETIME,C_CAPTION,C_JOBIDS,C_JOBNAMES,C_UNITIDS,C_UNITNAMES,C_BLOBID,C_STARTDATE,C_ENDDATE,C_TYPE,C_STATUS) values
(tempOid,tempYearly,tempOperator,tempOperateTime,tempNoticeName,tempJobId,SUBSTR(tempJobName,2),char(tempReceiveUnitId),tempReceiveUnitName,tempFileId,tempStartDate,tempEndDate,'1','2');
if tempSQLCODE<>0
then
set ResultStatus=tempSQLCODE;
set ResultMSG='插入公告信息时出错,错误代码:'||char(tempSQLCODE);
rollback;
return -1;
end if;
--如果执行到此
set ResultStatus=1;
set ResultMSG='执行成功';
return 1;
end
Trigger:
CREATE TRIGGER TB_TRI_S_INUNIT
BEFORE INSERT
ON TB_INF_INUNIT
REFERENCING NEW AS NEWROW FOR EACH ROW
begin ATOMIC
set NEWROW.c_unitid = ( select a.c_unitid from tb_inf_employee a where a.c_employeeid = NEWROW.c_empoid);
set NEWROW.c_jobid = ( select a.c_jobid from tb_inf_employee a where a.c_employeeid = NEWROW.c_empoid);
end
function:
create function get_positionName(c_empid bigint) returns varchar(1024)
begin atomic
declare positionName varchar(1024) default '';
declare tempName varchar(1024) default ' ';
declare col_counter smallint default 1;
declare num_of_cols smallint;
set num_of_cols = (
select count(*)
from TB_HNYC.TB_PER_EMPLOYEEPOSITION);
while col_counter <= num_of_cols do
set tempName = (
select c_positionName
from (
select ROW_NUMBER() over() as a, TB_HNYC.TB_PER_EMPLOYEEPOSITION.*
from TB_HNYC.TB_PER_EMPLOYEEPOSITION) as temp
where a=col_counter
and c_przt!='8'
and c_przt!='2'
and c_IFCURRENTPOST = '1'
and c_empoid = c_empid
order by c_jobtype asc,c_operatetime desc);
if tempName is not null then
set positionName = positionName||','||tempName;
end if;
set col_counter = col_counter + 1;
end while;
if length(positionName)>0 then
return right(positionName,length(positionName)-1);
end if;
end
分享到:
相关推荐
DB2存储过程是一组为了完成特定功能的SQL语句集合,通过存储在数据库中,可被应用程序或其他存储过程调用。DB2存储过程使用SQL Procedure Language (SQLPL),这是SQL Persistent Stored Module (PSM) 标准的一个子集...
SQL PL是一种结合了SQL查询功能和编程语言控制流程的工具,用于创建复杂的数据库对象,如函数、存储过程和触发器,以实现业务逻辑的封装和应用程序性能的提升。 一、SQL PL基础 SQL PL提供了变量声明、条件语句、...
#### 描述:DB2存储过程、触发器等指南 本指南旨在详细介绍IBM DB2中的存储过程、触发器以及用户定义函数等相关知识,帮助开发者深入了解这些组件的工作原理及其在实际应用中的最佳实践。 ### 详细知识点 #### 1....
DB2存储过程是数据库管理中的一个重要概念,它是一组为了完成特定功能的SQL语句集,可以在数据库中预先编译并存储。这个教程是专为初学者设计的,旨在帮助快速掌握DB2存储过程的创建、调用以及相关概念。同时,由于...
通过官方文档,开发者可以获得最新的产品支持信息和下载最新的软件工具包,这些都是开发和维护DB2存储过程时不可或缺的部分。 在实际应用中,开发者可以根据业务需求,利用DB2提供的这些工具,创建高效、安全且易于...
在IBM DB2数据库系统中,存储过程、触发器和用户定义函数是三个核心的数据库编程元素,它们在数据库应用开发中扮演着至关重要的角色。这些功能的熟练掌握可以帮助开发者构建健壮、高效且灵活的数据库应用程序。 **...
存储过程和函数是MySQL中增强数据库功能的重要工具,它们允许我们封装复杂的SQL逻辑并重复使用。存储过程可以接受参数,执行一系列操作,并可能返回结果。触发器则在特定事件(如INSERT、UPDATE或DELETE)发生时自动...
DB2支持多种编程语言接口,包括Java、C、C++、Python等,通过这些接口,开发者可以编写存储过程、触发器和其他数据库对象。例如,使用SQLJ(SQL与Java的集成)可以创建包含SQL语句的Java源代码,然后编译为可执行的...
- **存储过程**:DB2中的存储过程可能需要转换为GreenPlum/PostgreSQL中的存储过程或函数,因为后者的语法和行为有所不同。 #### 2.3 SQL谓词 SQL谓词是SQL语句中用来筛选结果集的关键部分,DB2与GreenPlum/...
本手册主要介绍了DB2数据库系统的命令和配置参数,涵盖了DB2管理服务器、实例、数据库、表、索引、视图、存储过程、触发器、函数等方面的知识点。下面将逐一详细介绍这些知识点。 DB2管理服务器命令 DB2管理服务器...
最后,第四部分(Vol 4)可能讨论了更高级的主题,如触发器、自定义函数和存储过程的安全性。这可能包括权限管理,确保只有授权的用户能够访问和修改特定的存储过程。此外,还可能涉及到性能优化,如索引策略、查询...
#### 五、DB2存储过程 存储过程是在数据库中编写的预编译代码块,可以接受输入参数,并返回结果。它们可以提高性能并简化复杂操作。 1. **创建存储过程**: - 示例: ```sql CREATE PROCEDURE proc_name (IN ...
12. **存储过程和触发器**:存储过程是预编译的SQL语句集合,可以提高效率,减少网络流量。触发器则在特定数据库事件发生时自动执行,常用于实现业务规则。 本套IBM DB2 v9.0 SQL帮助文档包含的c1042490.pdf、c...
DB2的经典书籍《Prentice.Hall.PTR.DB2.SQL.PL.Essential.Guide.for.DB2.UDB.on.Linux.UNIX.Windows.i5.OS.and.z.OS.2nd.Edition》,下了保证不后悔。
根据给定的文件信息,我们可以总结出以下关于DB2 Universal Database for iSeries中存储过程、触发器和用户自定义函数的重要知识点。 ### DB2 Universal Database for iSeries简介 #### 1.1 集成的关系数据库 DB2 ...
源代码可能包含创建、调用和管理DB2存储过程的示例。 4. **用户定义函数(UDF)**:UDF允许用户扩展数据库的功能,定义自己的函数来处理特定的数据转换或计算。源代码可能会演示如何在DB2中创建和使用UDF,以及如何...
8. **存储过程和触发器**:支持用户自定义的存储过程和触发器,允许在数据库级别实现复杂的业务逻辑。 在实际操作中,解压并安装这些许可证文件是至关重要的步骤,因为这将决定你能否合法地使用DB2 V9.5的所有功能...
8. **存储过程和触发器**:支持自定义的存储过程和触发器,便于实现业务逻辑。 9. **备份与恢复**:提供多种备份策略,如完整备份、增量备份和差异备份,以及灵活的恢复选项。 10. **自动化管理**:通过DB2控制...