db2v71存储过程报错
A. DB2数据库 写了一个循环插数的存储过程,但是报错,不清楚是为什么,请高手指导。
sql">begin
foriin2..1000
loop
insertintotvalues(i,'x');
endloop;
commit;
end;
B. db2创建存储过程报错
首先第一个错误,分号,应该是英文分号; 而不是中文;
C. db2的存储过程报TB_NAME" 是一个未定义的名称。. SQLCODE=-204, SQLSTATE=42704, DRIVER=3.50.152
你到这个db库去樱辩中查询下是否有这个库,你向里面脊山插灶困入条数据看看,如果可以,你看下你这个存储过程语句是不是写的有问题亚!
D. 调用db2存储过程的时候报错报错
declare 出参变量1 ...; 出参变量2...; .....; 出参变量N...;begin 过程(入参1,入参2,...,入参N,出参1,出参2,...,出参N);end;/
E. db2 调用存储过程,报错:SQL1646N 无法访问sqllib
帮一下包试试?
db2 terminate
db2 CONNECT TO dbname user USERID using PASSWORD
db2 BIND path\db2schema.bnd BLOCKING ALL GRANT PUBLIC SQLERROR CONTINUE
db2 BIND path\@db2ubind.lst BLOCKING ALL GRANT PUBLIC ACTION ADD
db2 BIND path\@db2cli.lst BLOCKING ALL GRANT PUBLIC ACTION ADD
db2 terminate
where dbname represents the name of a database to which the files should be bound, and where path is the full path name of the directory where the bind files are located, such as INSTHOME\sqllib\bnd where INSTHOME represents the home directory of the DB2 instance. db2ubind.lst and db2cli.lst contain lists of required bind files used by DB2 database procts. Packages that are already bound will return an SQL0719N error. This is expected.
F. db2 用 toad 创建存储过程 报错
在toad的左边窗口中找到存储过程标签,选中存储过程,然后右键--execute procere。 会弹出仿信窗口,输入参数,就可以调试备笑轮存储过程的升仿。
G. 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;
H. db2数据库调用存储过程不成功no authorized routine named
1.连接(与没野则数据库建立连脊禅接)
Class.forName(COM.ibm.db2.jdbc.net.DB2Driver).newInstance();
Connection con=DriverManager.getConnection(url,user,password);
2.注册输出参数
cs.registerOutParameter (3, Types.INTEGER);
3.调枯棚用存储过程:
CallableStatement cs=con.prepareCall({call store_name(参数,参数,参数)});
I. db2如何捕获存储过程异常
TRUNCATETABLEoutput_debugIMMEDIATE@
BEGIN
--DB2中,如果需要使用sqlcode,那么必须先DECLARE以后,才能使用。
DECLAREsqlcodeINT;
P1:BEGINATOMIC
--定义错误处理
--如果发生错误,结束处理,并回滚前面做的处理。
DECLAREUNDOHANDLER
FOR
SQLEXCEPTION
BEGIN
--异常处理
INSERTINTOoutput_debugVALUES('出错啦!'||TO_CHAR(sqlcode));
END;
--先更新.
UPDATEtest_mainSETvalue='Test3'WHEREid=1;
--插入一行主键重复数据.
INSERTINTOtest_mainVALUES(1,'PK');
INSERTINTOoutput_debugVALUES('本语句不会执行到!');
ENDP1;
END
@
db2=>select*fromtest_mainWHEREid=1@
IDVALUE
---------------------
1Test2
1条记录已选择。
db2=>select*fromoutput_debug@
DATA
----------------------------------------
出错啦!-803