由于我们上层页面(除CTG那块)完成进度还不错
今天组长告知可能需要研究写些db2的存储过程,
以缓解下层cobol的工作量
临危受命,自然不能怠慢
自个之前没接触过存储过程只能从头开始学习
下面写些心得,分享一下
sql procedure是由sql,sql pl写的,
sql相信大家都还能应付
主要说说sql pl (procedural language)
主要功能是控制逻辑流向,声明和设置变量,处理警告和异常
介绍些简单的关键词
declare :定义变量 和 定义出错处理
set:声明变量 和 给触发器定义中的表中的列赋值
if/then/else
三种形式:
1) if then/end if 语句块
2) if then/else/end if
3) if then/elseif /else/end if
curor游标
FETCh
open
CREATE PROCEDURE DEMO1 ( IN ITEMID VARCHAR(6),
OUT ITEMPROFIT DECIMAL(8, 2) )
DYNAMIC RESULT SETS 1
------------------------------------------------------------------------
-- SQL 存储过程
-- ITEMID
-- ITEMPROFIT
------------------------------------------------------------------------
P1: BEGIN
-- 声明变量
DECLARE ITEMPAYMENT DECIMAL(8,2) DEFAULT 0.0;
DECLARE TOTALCOST DECIMAL(8,2) DEFAULT 0.0;
P2:BEGIN
DECLARE ITEMCOST DECIMAL(8,2) DEFAULT 0.0;
DECLARE ITEMSHIPPINGFEE DECIMAL(8,2) DEFAULT 0.0;
-- 声明游标
DECLARE CURSOR1 CURSOR WITH RETURN FOR
SELECT COST, SHIPPING, PAYMENT
FROM "ADMF001.PRODUCT"
WHERE ITEM = ITEMID;
-- 游标对客户机应用程序保持打开
OPEN CURSOR1;
FETCH CURSOR1 INTO ITEMCOST, ITEMSHIPPINGFEE, ITEMPAYMENT;
SET TOTALCOST = ITEMCOST + ITEMSHIPPINGFEE;
END P2;
SET ITEMPROFIT = ITEMPAYMENT - TOTALCOST;
UPDATE "ADMF001.PRODUCT" SET PROFIT = ITEMPROFIT WHERE ITEM = ITEMID;
END P1