db2sql存储过程语法官方权威指南
㈠ DB2 存储过程调用 存储过程
1、存储过程编写
DROPPROCEDURE"PLName"
@
CREATEPROCEDURE"PLName"(--存储过程名字
ININ_IDBIGINT,--以下全是输入参数
ININ_ENTNAMEVARCHAR(200),
ININ_REGNOVARCHAR(50),
ININ_PASSWORDVARCHAR(20),
ININ_LEREPVARCHAR(300),
ININ_CERTYPECHARACTER(1),
ININ_CERNOVARCHAR(50),
ININ_LINKMANVARCHAR(50),
ININ_SEXCHARACTER(1),
ININ_MOBTELVARCHAR(30),
ININ_REQDATETIMESTAMP,
ININ_REMITEMVARCHAR(300),
ININ_STATECHARACTER(1),
ININ_TIMESTAMPTIMESTAMP
)
BEGIN
declareV_RESULTBIGINT;--声明变量
DELETEFROMTableNameAWHEREID=IN_ID;
SETV_RESULT=NULL;--为变量赋值
--检查用户输入的信息是否合法
selectb.idINTOV_RESULTfromTableNameBb,TableNameCcwhere正常的判断条件
if(V_RESULTISNOTNULL)then---如果合法,执行下面的insert语句
INSERTINTOTableNameA(ID,ENTNAME,REGNO,PASSWORD,LEREP,CERTYPE,CERNO,LINKMAN,SEX,MOBTEL,REQDATE,REMITEM,STATE,TIMESTAMP)
VALUES(IN_ID,IN_ENTNAME,IN_REGNO,IN_PASSWORD,IN_LEREP,IN_CERTYPE,IN_CERNO,IN_LINKMAN,IN_SEX,IN_MOBTEL,IN_REQDATE,IN_REMITEM,IN_STATE,IN_TIMESTAMP);
endif;
commit;
END
@
2、调用存储过程
1.拷贝到DB2客户端工具中直接执行
2.将上面的语句保存为test.db2文件放到任意目录下(比如D盘根目录),然后在cmd输入db2cmd 然后输入db2 -td@ -vf D: est.db2即可
3.直接写sql:
call PLName(存储过程名字) (IN_ID,IN_ENTNAME,IN_REGNO,IN_PASSWORD,IN_LEREP,IN_CERTYPE,IN_CERNO,IN_LINKMAN,IN_SEX,IN_MOBTEL,IN_REQDATE,IN_REMITEM,IN_STATE,IN_TIMESTAMP对应的值)
㈡ DB2存储过程中一些参数的明细解说
IN 是输入参数
OUT 是输出参数
建议你看一看sqllib/samples/sqlproc目录下的 .db2文件,这里面全是一些例子,把这些看一遍你应该就明白了,不是很复杂
上面说的.db2文件也可能在下面这个目录中,根据版本或系统不同可能不一样
SQLLIB\samples\sqlpl
㈢ 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@
㈣ 有没有专门讲解db2存储过程的书籍,求推荐。
没有见过这样的书。存储过程逻辑上只不过是一组SQL语句的集合而已,只要掌握了各种SQL命令,理解连接的原理、子查询的原理等SQL基本知识,就具备写存储过程的基础了;其次,应该了解所使用的数据库管理系统的逻辑结构,譬如数据库的系统表,系统视图,系统存储过程,系统函数等,这些都是必须了解的,再深一点就是表、索引等数据库对象的存储原理,不同的数据库产品是不尽相同的;再次,存储过程经常要处理数据的计算,存储,传递等算法问题,所以数据结构和算法也必须有一定的基础。
当然,存储过程是数据库产品扩展的功能,也就是说SQL标准中并没有对存储过程的语法做出详细的规定,所以在不同的数据库上写存储过程的语法差别还是有的。譬如在MSSqlserver上用T-SQL和在Oracle上用PL-SQL写存储过程的语法是有一点不同的。但这绝对不是写存储过程的难点。写惯了T-SQL的人,可能用1个星期就习惯了写PL-SQL,随便看看参考手册就行。
综上所述,应该没有专门讲存储过程的书。就算真的有,也最好不要看。因为写存储过程的能力是一种编程的综合能力。
㈤ 如何执行db2存储过程
1、db2 create database 数据库名 <-- 创建数据库
2、db2 connect to 数据库名 user 用户名 using 用户密码 <-- 连接数据库
3、db2 -tvf otpdb_v3_db2.sql <-- 为新建数据库建立表结构
4、db2 -td@ -f 存储过程文件绝对路径 <-- 导入存储过程,无错误会提示成功
4、调用存储过程:
Windows 下:db2 call 存储过程名(参数1,参数2)
AIX 下:db2 <-- 要先进入DB2,方可调用存储过程或执行SQL语句
db2=>call 存储过程名(参数1,参数2)
5、验证插入数据是否成功
Windows 下:db2 select count(*) from FTOTP_USERINFO
AIX 下:db2 <-- 要先进入DB2,方可调用存储过程或执行SQL语句
db2=>select count(*) from FTOTP_USERINFO
Windows 下:db2 select count(*) from FTOTP_TOKENINFO
AIX 下:db2 <-- 要先进入DB2,方可调用存储过程或执行SQL语句
db2=>select count(*) from FTOTP_TOKENINFO
㈥ db2如何创建存储过程
1.首先连接数据库
2.发出一下命令:
DB2 -td@ -vf createSQLproc.DB2 createSQLproc.DB2文件中是创建存储过程的SQL语句; -td 选项让命令行处理程序使用@作为语句终止字符; -v 选项让命令处理程序将命令文本回显到标准输出; -f 让命令行处理程序从指定文件读取命令输入。
希望能解决您的问题。
㈦ db2 存储过程的学习
个人认为网上有:《DB2存储过程开发最佳实践》和《DB2SQL存储过程语法官方权威指南》两本书比较不错!
具体网址链接常被屏蔽,所以就补贴了,网搜一下,多的是
㈧ 如何快速掌握DB2存储过程
凡事都没有快速的,想要完全掌握,还是买本书从头看到尾吧,如果想应付着做点项目,哪很简单,在db2的安装目录.../sqllib/下面有个samples目录,里面有个存储过程的目录,照着就可以写了,这个可以看成是最快的办法吧
㈨ 关于db2数据库,存储过程语法的问题,求助
用游标来取这个结果,然后遍历结果集,判断后+1即可,太晚了,实在不想写代码。嘿嘿,你可以参考一下!
㈩ 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 的搜索函数。