db2存储过程sql
⑴ 请教一个db2的存储过程
1、存储过程编写
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
DROP PROCEDURE "PLName"
@
CREATE PROCEDURE "PLName"(--存储过程名字
IN IN_ID BIGINT , --以下全是输入参数
IN IN_ENTNAME VARCHAR(200) ,
IN IN_REGNO VARCHAR(50),
IN IN_PASSWORD VARCHAR(20),
IN IN_LEREP VARCHAR(300),
IN IN_CERTYPE CHARACTER(1),
IN IN_CERNO VARCHAR(50),
IN IN_LINKMAN VARCHAR(50),
IN IN_SEX CHARACTER(1),
IN IN_MOBTEL VARCHAR(30),
IN IN_REQDATE TIMESTAMP,
IN IN_REMITEM VARCHAR(300),
IN IN_STATE CHARACTER(1),
IN IN_TIMESTAMP TIMESTAMP
)
BEGIN
declare V_RESULT BIGINT; --声明变量
DELETE FROM TableNameA WHERE ID = IN_ID;
SET V_RESULT = NULL; --为变量赋值
--检查用户输入的信息是否合法
select b.id INTO V_RESULT from TableNameB b,TableNameC c where 正常的判断条件
if(V_RESULT IS NOT NULL) then ---如果合法,执行下面的insert语句
INSERT INTO TableNameA(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);
end if;
commit;
END
@
2、调用存储过程
1.拷贝到DB2客户端工具中直接执行
2.将上面的语句保存为test.db2文件放到任意目录下(比如D盘根目录),然后在cmd输入db2cmd 然后输入db2 -td@ -vf D:\test.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 存储过程 异常处理
存储过程异常的处理:
DECLARE handler-type HANDLER FOR condition handler-action
异常处理器类型(handler-type)有以下几种:
CONTINUE 在处理器操作完成之后,会继续执行产生这个异常语句之后的下一条语句。
EXIT 在处理器操作完成之后,存储过程会终止,并将控制返回给调用者。
UNDO 在处理器操作执行之前,DB2会回滚存储过程中执行的SQL操作。在处理器操作完成之后,存储过程会终止,并将控制返回给调用者。
异常处理器可以处理基于特定SQLSTATE值的定制异常,或者处理预定义异常的类。预定义的3种异常如下所示:
NOT FOUND 标识导致SQLCODE值为+100或者SQLSATE值为02000的异常。这个异常通常在SELECT没有返回行的时候出现。
SQLEXCEPTIOIN 标识导致SQLCODE值为负的异常。
SQLWARNING 标识导致警告异常或者导致+100以外的SQLCODE正值的异常。
如果产生了NOT FOUND 或者SQLWARNING异常,并且没有为这个异常定义异常处理器,那么就会忽略这个异常,并且将控制流转向下一个语句。如果产生了SQLEXCEPTION异常,并且没有为这个异常定义异常处理器,那么存储过程就会失败,并且会将控制流返回调用者。
以下示例声明了两个异常处理器。 EXIT处理器会在出现SQLEXCEPTION 或者SQLWARNING异常的时候被调用。EXIT处理器会在终止SQL程序之前,将名为stmt的变量设为"ABORTED",并且将控制流返回给调用者。UNDO处理器会将控制流返回给调用者之前,回滚存储过程体中已经完成的SQL操作。
清单3:异常处理器示例
DECLARE EXIT HANDLER FOR SQLEXCEPTION, SQLWARNING SET stmt = 'ABORTED';
DECLARE UNDO HANDLER FOR NOT FOUND;
如果预定义异常集不能满足需求,就可以为特定的SQLSTATE值声明定制异常,然后再为这个定制异常声明处理器。语法如下:
清单4:定制异常处理器
DECLARE unique-name CONDITION FOR SQLSATE 'sqlstate'
处理器可以由单独的存储过程语句定义,也可以使用由BEGIN…END块界定的复合语句定义。注意在执行符合语句的时候,SQLSATE和SQLCODE的值会被改变,如果需要保留异常前的SQLSATE和SQLCODE,就需要在执行复合语句的第一个语句把SQLSATE和SQLCODE赋予本地变量或参数。
通常,会为存储过程定义一个执行状态的输出参数(例如:poGenStatus)。
declare sqlcode integer default 0;
begin
declare continue handler for sqlexception set ret = sqlcode;
declare continue handler for sqlwarning set ret = sqlcode;
declare continue handler for not found set ret = sqlcode;
end ; --异常的声明
--异常的处理
if sqlcode< 0 or sqlcode= 100 then
set O_RetCod = RetCode;
set O_RetMsg = 'CLN02:产品实例关联客户过程出错!';
insert into LOG.OPER_LOG_TAB(PROC_NAME,OBJ_TAB,REGION_COD,OPER_COUNT,ERR_CODE,DATA_TIME,OPER_TIME)
values('P_DW_CLEAN','GLOBAL TEMP',0,0,retcode,CHAR(last_3_mon_time),current TIMESTAMP);
return;
else
set RetCode = 0;
end if;
⑶ db2在linux后台执行创建存储过程以及函数的.sql文件报错,但是在toad中执行没问题
在toad的左边窗口中找到存储过程标签,选中存储过程,然后右键--execute procere。 会弹出窗口,输入参数,就可以调试存储过程的。
⑷ 如何在DB2的SQL存储过程中实现清空表求答案
db2
create
table
ttt
(c1
char(6))
not
logged
initially
插入一些数据:
然后,以下SQL存储过程为例:
在SQL存储过程中,以EXCECUTE
IMMEDIATE
执行
alter
table
...
activate
not
logged
initially
with
empty
table
CREATE
PROCEDURE
HUANGDK.truncat_t
(
)
DYNAMIC
RESULT
SETS
1
------------------------------------------------------------------------
⑸ db2如何创建存储过程
1.首先连接数据库
2.发出一下命令:
DB2 -td@ -vf createSQLproc.DB2 createSQLproc.DB2文件中是创建存储过程的SQL语句; -td 选项让命令行处理程序使用@作为语句终止字符; -v 选项让命令处理程序将命令文本回显到标准输出; -f 让命令行处理程序从指定文件读取命令输入。
希望能解决您的问题。
⑹ 如何在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中执行存储过程
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中执行存储过程
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、验证插入数据是否成功