当前位置:首页 » 存储配置 » db2存储过程部署

db2存储过程部署

发布时间: 2023-01-11 10:59:05

‘壹’ DB2 DataStudio存储过程入门

建好后 看到如下界面,图中DDL部分是选择的存储过程模板

场景:
输入两个参数A和B,并求和
DDL
只需要按照模板,修改参数部分和主体部分即可

DDL的空白处,鼠标右键——》部署 或者 单击 部署 按钮

存储过程——》运行 或者 单击 运行 按钮 如图

‘贰’ db2存储过程

CREATE OR REPLACE PROCEDURE PROCEDURE_NAME(IN FILED FILE_TYPE|OUT FIELD FIELD_TYPE|INOUT FIELD_TYPE)

  BEGIN

   [DECLARE I INT DEFAULT 1;]

   [可以写循环:

    REPEAT 

    UNTIL (...)

    END REPEAT;

   ]

   ...

  END

  @

  CREATE OR REPLACE PROCEDURE INSERTDATA(

  IN COUNTS INT

  )  

  BEGIN

   DECLARE I INT DEFAULT 1;

   REPEAT

    insert into ESBTLOG(UUID, UUID_POS, MSG_ID, ESB_CODE, CLI_ID, CLI_ID_BOCS, SERV_ID, SERV_TRAN_CODE, SERV_TCODE, ESB_RET_CODE, ERR_MSG, TRACE_NO, TRAN_DATE, TRAN_TIME, TXN_STATUS, JOURNAL_NO, EXT_UUID, TXN_TOKEN, NODE_NAME, TRAN_BEGIN_TIME, TRAN_END_TIME, SP1_BEGIN_TIME, SP1_END_TIME, USER_BOCS, WKSTATION, RET_TRAN_DATE, RET_TRAN_TIME, RET_AC_DATE, RET_TRACE_NO, AP_TRACE_NO, BR_NO, TM_SMP)

    values('141114B0000R', '0-0-0-0-25', '', 'BOCI060460', '520', '14', '-', '-', '000000', '2020001003', 'Send To client error.QM:CAPAQ01 QUEUE:ESB.CAP.RES.LQ1', '530000U1KQUMT', '20180730', '095310', 'E', '-', '-', '-', 'ESB.QM2', '2018-12-11-09.51.16.398765', '2018-12-11-09.51.16.398765', '2018-12-11-09.51.16.398765', '2018-12-11-09.51.16.398765', '4980261', '994', '-', '-', '-', '-', '-', '51604', '2018-12-11-09.51.16.398765');

    SET I = I + 1;

   UNTIL (I > COUNTS)

   END REPEAT;

  END

  @

注意:写存储过程需要以一个符号结尾,此处用的是@符号

db2 "select * from SYSCAT.PROCEDURES where PROCNAME='INSERTDATA'"

    db2 "drop procere INSERTDATA2SIPTLOG(INT,VARCHAR())"

注意:要将参数带进去

    db2 -td@ -vf filename (该文件需以@符号结尾).

-td选项让命令行处理程序使用@作为语句终止字符;-v选项让命令处理程序将命令文本回显到标准输出;-f让命令行处理程序从指定文件读取命令输入

‘叁’ db2如何创建存储过程

1.首先连接数据库 2.发出一下命令: DB2 -td@ -vf createsqlproc.DB2 createSQLproc.DB2文件中是创建存储过程的SQL语句; -td 选项让命令行处理程序使用@作为语句终止字符; -v 选项让命令处理程序将命令文本回显到标准输出; -f 让命令行处理程序从指定文件读取命令输入。
希望能解决您的问题。

‘肆’ DB2中建立存储过程的详细参数和语法

DECLARE CHOICE2 CURSOR WITH RETURN TO CALLER FOR --声明游标 CHOICE2
SELECT COMPANYID,DEPTID,SEQID,SUBMITTIME,SUBMITDATE,
B.GRADEDESC HYEAR,PRODUCTID,PRODUCTCODE,PRODUCTDESC,
A.GRADEID,PRICE,SFZDPY,LQUANT,MQUANT,MCQUANT,LCQUANT,
UQUANT,OTHQUANT1,OTHQUANT2,OTHQUANT3,OTHQUANT4,EMP1,EMP2,STATUS,A.REMARK,
DECIMAL(ABS(MCQUANT-MQUANT)/NULLIF(MQUANT,0)*100,10,2)TAG
FROM T_SUPPLY_PPB_HY A
LEFT JOIN T_SUPPLY_GRADATION B ON A.GRADEID=B.GRADEID
WHERE HYEAR=TO_CHAR(P_NF)||P_BN
ORDER BY B.GRADEID,PRODUCTCODE,A.PRICE;

--1.DECIMAL(P,S)十进制数,小数点位置由数字的精度(P)和小数位(S)确定。
-- 精度是数字的总位数,必须小于32。小数位是小数部分数字的位数且总是小于或等于精度值。
-- 如果未指定精度和小数位,则十进制值的缺省精度为5,缺省小数位为0。
--2.语法:NULLIF ( expression , expression )
-- expression:(常量、列名、函数、子查询或算术运算符、按位运算符以及字符串运算符的任意组)
-- 如果两个表达式不相等,NULLIF 返回第一个 expression 的值。如果相等,NULLIF 返回第一个 expression 类型的空值。如果两个表达式相等且结果表达式为 NULL,NULLIF 等价于 CASE 的搜索函数。

‘伍’ DB2存储过程语法

http://www.51cto.com/specbook/49/3606.htm

此语句创建一个名为 gbl_temp 的用户临时表。定义此用户临时表所使用的列的名称和说明与 empltabl 的列的名称和说明完全相同。隐式定义只包括列名、数据类型、可为空特性和列缺省值属性。未定义所有其他列属性,包括唯一约束、外部关键字约束、触发器和索引。执行 COMMIT 操作时,若未对该表打开 WITH HOLD 游标,则该表中的所有数据都被删除。不记录对用户临时表所作的更改。用户临时表被放在指定的用户临时表空间中。此表空间必须存在,否则此表的声明将失败。

在上面的例子中,创建 CLP 连接后声明了一个临时表。然后创建了引用临时表的过程 p1。这里要注意的关键是,即使在过程体中没有声明临时表,该过程也被成功创建。

‘陆’ DB2 V9.7存储过程调试

CREATE PROCEDURE usp_client_insert
(
IN i_tradeSN VARCHAR(20),
IN i_scanSN VARCHAR(20),
OUT o_tradeID INT,
OUT Erro INT,
OUT Erro_msg VARCHAR(20)
)
language sql
specific SPOVERTIMEPAY
dynamic result sets 1
modifies sql data

BEGIN
DECLARE re_1 VARCHAR(20) default 'un';

declare exit handler for not found
begin
set Erro =99;
set vErro_msg = 'insert new trade record failed.';
end;

SET o_tradeID = 0;
if (i_tradeSN is null and i_scanSN is null) then
SET Erro =99;
SET Erro_msg = 'no record for insert.';
THEN SIGNAL SQLSTATE '77880' SET MESSAGE_TEXT = 'no record for insert.';
end if;

if i_tradeSN is null then
SELECT TRADEID INTO o_tradeID FROM TBLTRADES WHERE SCANSN = i_scanSN;
end if;

if i_scanSN is null then
SELECT TRADEID INTO o_tradeID FROM TBLTRADES WHERE TRADESN = i_tradeSN;
end if;

if o_tradeID = 0 then
INSERT INTO TBLTRADES (TRADESN, SCANSN, REMARKS) VALUES ( i_tradeSN,i_scanSN,re_1);
SELECT TRADEID INTO o_tradeID FROM TBLTRADES WHERE TRADESN = i_tradeSN and SCANSN = i_scanSN;
end if;
END

‘柒’ DB2怎样创建存储过程

CREATE PROCEDURE "DB2INST2"."SP_SF_GET_PRESC"
(IN "V_GHXH" BIGINT,
IN "V_RECORDSTATUS" SMALLINT,
IN "V_TYPE" SMALLINT,
IN "V_PRESCNO" BIGINT,
IN "V_ISQX" SMALLINT,
OUT "ERR_CODE" INTEGER,
OUT "ERR_TEXT" VARCHAR(100)
)

LANGUAGE SQL
NOT DETERMINISTIC
CALLED ON NULL INPUT
EXTERNAL ACTION
OLD SAVEPOINT LEVEL
MODIFIES SQL DATA
INHERIT SPECIAL REGISTERS
P1: BEGIN
DECLARE SQLCODE INT;
DECLARE V_CFQX SMALLINT;
DECLARE V_SFFYKS BIGINT;--
DECLARE V_YBDM CHAR(4);
--具体实现
END P1;

‘捌’ DB2 如何创建存储过程

这个是可以的,我在aix机子上用的代码如下:
db2 connect to ETL user ETL using ETL
db2 –td@ -vf createSQLproc.sql
你可以看看你的脚本是否有问题,如果数据库中该存储过程不存在可以直接这样写:
db2 –tvf createSQLproc.sql
还有,就是你的权限,看看你是否有权限!

‘玖’ 如何快速掌握DB2存储过程

做项目很急的话,网上搜存储过程例子,遇到问题多查官方文档或者网上搜,网上有DB2的社区,那边更专业高手也多,如果时间相对宽松,可以选择性多看看DB2的官方文档(DB2结构原理和DB2编程的)。

‘拾’ DB2存储过程

db2 -td@ -vf a.db2
这一句中@的意思是读取文件中的分隔,每遇到一个@号会将之前的SQL语句做为单独一段来执行,你的存储过程中有使用了这个符号,则执行时将创建存储过程的语句给分拆开了,所以执行会同语法错误,你这一段中只需要两个@号,第一句连接数据库后用一个,最后用一个,中间的改成“;”号。

connect to toolsdb@
CREATE PROCEDURE testProced(
in in_name varchar(20),
out out_name varchar(20)
)
LANGUAGE SQL

BEGIN
select a into out_name from bb where a1 = in_name;
END@

热点内容
linux命令全称 发布:2024-05-17 12:07:54 浏览:110
ftpnas区别 发布:2024-05-17 12:06:18 浏览:949
512g存储芯片价格 发布:2024-05-17 12:04:48 浏览:963
脚本运行周期 发布:2024-05-17 11:39:09 浏览:808
阿里云服务器怎么配置发信功能 发布:2024-05-17 11:37:24 浏览:313
编程中的变量 发布:2024-05-17 11:33:06 浏览:777
加密视频怎么解密 发布:2024-05-17 11:02:52 浏览:571
柳工挖机密码多少合适 发布:2024-05-17 11:00:40 浏览:188
android工程叹号 发布:2024-05-17 10:56:21 浏览:481
在苹果手机应用怎么比安卓贵 发布:2024-05-17 10:56:20 浏览:548