当前位置:首页 » 存储配置 » db2存储过程异常处理

db2存储过程异常处理

发布时间: 2022-07-24 16:53:34

A. 我的DB2存储过程出问题了 现在我想把它还原到前一段时间备份的那个状态去 但是有这样一个问题

sqlSTATE=42601
字符、标记或子句无效或丢失
仔细检查你的语句吧

B. 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.

C. db2创建存储过程在begin和end中间有东西就报错是什么情况

因为在 Unix 平台下的 DB2 存储过程对于实例用户和受防护用户之间的关系有一个约束,即 DB2 实例用户必须同时是受防护用户的主组中的一个用户。

上述问题的发生就是由于在系统上,实例用户未加入至受防护用户的主组中,从而引发了存取权限不够的问题所导致的,而并非真的发生了如日志中所报的磁盘错误。解决这一问题的方法很简单,只要将实例用户加入该主组即可。

但有时用户会发现,即使已将用户加入到指定组,问题仍然存在,这时还应检查一下实例用户所加入的组是否是实例用户所对应的受防护用户的主组,即检查一下加入的组是否正确。

要找到实例用户所应的受防护用户以及受防护用户的主组,可用如下方法:

转入实例用户 Home 路径下的 sqllib/adm 路径。

执行命令:ls -l .fenced,会得到类似如下输出。

r--r--r-- 1 db2fencj db2fgrp2 0 Jul 30 09:57 .fenced。

输出中表明,该文件所属的用户(db2fencj)即为受防护用户,所属的组(db2fgrp2)即为受防护用户的主组

继而,用户便可验证实例用户是否被加入到了正确的组中,如果结果正确,便可以解决上述问题。

D. 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

E. 在db2中执行存储过程报了这样一个错,望高手指教一下啊。

你调用的存储过程P_ER_VALUATION啊。。。
先创建该存储过程,然后再调用它。

F. db2存储过程执行表和存储过程就死锁怎么处理

1、建议获取snapshot for application 以及snapshot for locks,应可以确定是哪一句发生了锁。
2、如果能肯定是这一句,如果可以直接在最后加上 with ur应该就可以了(如果业务逻辑容许的话)。

G. db2 存储过程中我想获取异常的sqlcode,该怎么实现

看个例子
create or replace procere tes as
sqlc integer;
begin
insert into t1 values (1);
sqlc:=sqlcode;
if sqlc=0 then
dbms_output.put_line('成功!');
else
dbms_output.put_line('失败!');
end if;
end;

H. db2存储过程怎么保存运行错误详细信息

如果是在plsql developer中修改的,可以直接点那个齿轮图标,或者F8即可编译。 如果是在sqlplus中,那就敲入修改后的过程代码(create or replace procere...),最后以/结尾运行即可。

I. db2的过程中怎样写异常处理

创建SQL存储过程(CREATEPROCEDURE(SQL)statement)

CREATEPROCEDUREprocere-name(IN|OUT|INOUTparameter-namedata-type,...))---存储过程可以设定输入参数和输出参数
LANGUAGESQL----DB2可以用多种语言编写存储过程,这里用的是纯SQL
BEGIN---开始
DECLAREvIDsmallint;---定义变量和Oracle一样DECLARE变量名变量的数据类型;
FORVASSELECTBRND_CDFROMTMP_BRND_CD---for循环tmp_brnd_cd预先创建好
DO---循环体开始
SETvID=BRND_CD;---对vID赋值,db2可以用set赋值,也可以用values赋值,这里可以写成values(BRND_CD)intovID
INSERTINTOWWM_FORINSERT_TESTVALUES(vID);---往wwm_forinsert_test插入数据
ENDFOR;-----循环体结束
END@-----存储过程结束

参数语法说明

1、procere-name:存储过程的名字,在同一个数据库的同一模式下,不能存在存储过程名相同参数数目相同的存储过程,即使参数的类型不同也不行。

2、(IN|OUT|INOUTparameter-namedata-type,...):传入参数IN:输入参数OUT:输出参数INOUT:作为输入输出参数parameter-name:参数名字,在此存储过程中唯一的标识符。data-type:参数类型,可以接收SQL类型和创建的表。不支持LONGVARCHAR,LONGVARGRAPHIC,DATALINK,REFERENCE和用户自定义类型。

3、SPECIFICspecific-name:唯一的特定名称(别名),可以用存储过程名代替,这个特定名称用于dorp存储过程,或者给存储过程添加注视用,但不能调用存储过程。如果不指定,则数据库会自动生成一个yymmddhhmmsshhn时间戳的名字。推荐给出别名。

4、DYNAMICRESULTSETSinteger:指定存储过程返回结果的最大数量。存储过程中虽然没有return语句,但是却能返回结果集。

5、CONTAINSSQL,READSSQLDATA,MODIFIESSQLDATA:指定存储过程中的SQL访问级别CONTAINSSQL:表示存储过程可以执行中,既不可读取SQL数据,也不可修改SQL数据。READSSQLDATA:表示存储过程可以执行中,可读取SQL,但不可修改SQL数据。MODIFIESSQLDATA:表示存储过程可以执行任何SQL语句。可以对数据库中的数据进行增加、删除和修改。

6、:表示存储过程是动态或者非动态的。动态的返回的值是不确定的。非动态的存储过程每次执行返回的值是相同的。

7、CALLEDONNULLINPUT:表示可以调用存储过程而不管任何的输入参数是否为NULL,并且,任何的OUT或者INOUT参数可以返回一个NULL或者非空值。检验参数是否为NULL是在过程中进行的。

8、INHERITSPECIALREGISTERS:表示继承专用寄存器。

9、:建立存储点。OLDSAVEPOINTLEVEL是默认的存储点。

10、LANGUAGESQL:指定程序的主体用的是SQL语言。

11、:表示存储过程是否执行一些改变理数据库状态的活动,而不通过数据库管理器管。默认是EXTERNALACTION。如果指定为NOEXTERNALACTION,则数据库会确定最最佳优化方案。

12、PARAMETERCCSID:指定所有输出字符串数据的编码,默认为UNICODE编码数据库为PARAMETERCCSIDUNICODE,其他的数据库默认为PARAMETERCCSID3ASCII。

13、SQL-procere-body:存储过程的主体

热点内容
怎么用电脑开mc服务器 发布:2024-10-05 09:25:01 浏览:407
linux目录乱码 发布:2024-10-05 09:24:24 浏览:170
欧姆龙plc有密码如何传送 发布:2024-10-05 09:24:24 浏览:335
安卓11如何隐藏图标 发布:2024-10-05 09:11:32 浏览:701
唐山壹编程 发布:2024-10-05 08:48:07 浏览:811
广东gps时钟服务器云主机 发布:2024-10-05 08:27:31 浏览:754
超级访问沙溢 发布:2024-10-05 08:26:13 浏览:227
php删除数组空 发布:2024-10-05 08:15:21 浏览:466
100平小型超市如何配置 发布:2024-10-05 08:10:56 浏览:91
sql语句删除多表 发布:2024-10-05 08:10:55 浏览:818