‘壹’ 如何在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 6、db2 SELECT TOKEN, PUBKEY FROM FTOTP_TOKENINFO FETCH FIRST 10000 ROWS ONLY > 要保存文件的绝对全路径 <-- 从 DB2 中导出前一万条记录 windows - e.g. db2 SELECT TOKEN, PUBKEY FROM FTOTP_TOKENINFO FETCH FIRST 10000 ROWS ONLY > c:\abc.txt AIX - e.g. db2 SELECT TOKEN, PUBKEY FROM FTOTP_TOKENINFO FETCH FIRST 10000 ROWS ONLY > c:\abc.txt <-- 注意:不能先进入DB2,执行查询与导出命令组合 7、db2 drop procere 存储过程名 <-- 删除存储过程 8、db2 drop database 数据库名 <-- 删除指定名称的数据库 注,如果删除时提示有应用程序连接到这个数据库上,可以用如下命令断开所有应用程序的连接: db2 force application all <-- 断开所有应用程序的连接
‘贰’ 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 存储过程调用 存储过程
给你一个链接,自己学习吧。
个人用过几个月的DB2,觉得db2的存储过程 调试最麻烦了。
http://bbs.csdn.net/topics/110040013
‘肆’ 如何执行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中建立存储过程的详细参数和语法
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 如何创建存储过程
这个是可以的,我在aix机子上用的代码如下:
db2 connect to ETL user ETL using ETL
db2 –td@ -vf createSQLproc.sql
你可以看看你的脚本是否有问题,如果数据库中该存储过程不存在可以直接这样写:
db2 –tvf createSQLproc.sql
还有,就是你的权限,看看你是否有权限!
‘柒’ 如何快速掌握DB2存储过程
做项目很急的话,网上搜存储过程例子,遇到问题多查官方文档或者网上搜,网上有DB2的社区,那边更专业高手也多,如果时间相对宽松,可以选择性多看看DB2的官方文档(DB2结构原理和DB2编程的)。
‘捌’ DB2 存储过程中的数组怎么定义和使用
开发不熟. sql pl里面好像没有对数组的支持.
固定长度或者有一定生成规律的只读数组可以用table values语句来实现,或者用with表达式来实现更复杂一点的逻辑. 不过这也只能解决一部分问题.
select * from table(values(1),(2),(3)) as t(a)
with t(a) as ( values 1 union all select t.a + 1 from t where t.a<99) select * from t;
但要在这个数组里面做删除,改变元组的操作就不适用了.
‘玖’ DB2 存储过程
你好,需要指定DYNAMIC RESULT SETS 1,如:
LANGUAGE SQL
SPECIFIC GetBOM
DYNAMIC RESULT SETS 1
MODIFIES SQL DATA
‘拾’ db2存储过程变量问题
创建SQL存储过程(CREATE PROCEDURE (SQL) statement )
CREATE PROCEDURE procere-name(IN | OUT | INOUT parameter-name data-type,...) ) ---存储过程可以设定输入参数和输出参数LANGUAGE SQL ----DB2可以用多种语言编写存储过程,这里用的是纯SQLBEGIN ---开始DECLARE vID smallint; ---定义变量 和Oracle一样 DECLARE 变量名 变量的数据类型;FOR V AS SELECT BRND_CD FROM TMP_BRND_CD ---for循环 tmp_brnd_cd预先创建好DO ---循环体开始SET vID=BRND_CD; ---对vID赋值,db2可以用set赋值,也可以用values赋值,这里可以写成values(BRND_CD) into vIDINSERT INTO WWM_FORINSERT_TEST VALUES(vID); ---往wwm_forinsert_test 插入数据END FOR; --