Redian新闻
>
DB2 Stored Procedure Error Handler
avatar
DB2 Stored Procedure Error Handler# Database - 数据库
m*d
1
国内某高新技术开发区需招聘一名首席技术专家(CTO), 从事云存储系统的研发, 应用以及技术策划管理方面的工作. 要求至少3-5年云存储研发和应用方面的工作经验, 或者博士学位从事云存储相关课题的研究.
有兴趣者可以通过站内发信, 我会给你雇佣方的联系方式. 待遇及其他细节需要直接和雇佣方联系.
avatar
S*y
2
男avatar可以穿女的配饰么?想混搭。
avatar
O*T
3
我现在有一个很简单的stored procedure in db2
create or replace procedure P_1()
begin
insert into table_A ( column1,column2)
select a,b
from table_b;
end;
为了防止这个procedure fail(比如table_b不存在之类的情况...),我想放一个error
handler在这个statement里面,我不在乎到底是什么error,只要上面那个Insert
statement fail了(或者说这个sp fail了?),就往另外一个table添加一条类似Log
的记录Insert into table_c (column1,column2) values (P_1,current date)
想请教各位大牛这个code我该怎么写,从来没写过error handler的东西,网上查了很
久,仍旧是一片雾水,连应该放在这个insert statement前面还是后面还是专门写一个
error handler的sp都没想明白。
另外,因为工作关系,现在开始接触DB2,不知道大家有什么好书可以推荐,最好能涵
盖怎么在DB2写stored procedure, function, cursor的内容。
先谢谢大家了
avatar
t*8
4
你试一下就知道了
avatar
l*b
5
u can use
EXCEPTION WHEN OTHERS
THEN
-- ur error logging or handling
-- statements here
// when others handler is a catch-all
// handler.

error
Log

【在 O***T 的大作中提到】
: 我现在有一个很简单的stored procedure in db2
: create or replace procedure P_1()
: begin
: insert into table_A ( column1,column2)
: select a,b
: from table_b;
: end;
: 为了防止这个procedure fail(比如table_b不存在之类的情况...),我想放一个error
: handler在这个statement里面,我不在乎到底是什么error,只要上面那个Insert
: statement fail了(或者说这个sp fail了?),就往另外一个table添加一条类似Log

avatar
r*t
6
haha, give it a try~
avatar
O*T
7
谢谢,好像exception只可以用在oracle?

【在 l******b 的大作中提到】
: u can use
: EXCEPTION WHEN OTHERS
: THEN
: -- ur error logging or handling
: -- statements here
: // when others handler is a catch-all
: // handler.
:
: error
: Log

avatar
l*b
8

PL/SQL (Procedural Language/Structured Query Language) statements can be
compiled and executed using DB2® interfaces. This support reduces the
complexity of enabling existing PL/SQL solutions so that they will work with
the DB2 data server.
http://www-01.ibm.com/support/knowledgecenter/SSEPGG_10.5.0/com

【在 O***T 的大作中提到】
: 谢谢,好像exception只可以用在oracle?
avatar
O*T
9
哦,这样啊,太谢谢了

with

【在 l******b 的大作中提到】
:
: PL/SQL (Procedural Language/Structured Query Language) statements can be
: compiled and executed using DB2® interfaces. This support reduces the
: complexity of enabling existing PL/SQL solutions so that they will work with
: the DB2 data server.
: http://www-01.ibm.com/support/knowledgecenter/SSEPGG_10.5.0/com

avatar
s*o
10
难道不能用个
IF EXISTS SELECT TOP 1 FROM table_b
BEGIN
INSERT
END
ELSE
BEGIN
INSERT into log
END
avatar
l*b
11

从逻辑上说好像是这样子, 但他说的好像是需要exception handling吧?
T-SQL如何handle exception?

【在 s**********o 的大作中提到】
: 难道不能用个
: IF EXISTS SELECT TOP 1 FROM table_b
: BEGIN
: INSERT
: END
: ELSE
: BEGIN
: INSERT into log
: END

avatar
l*b
12

我以前也不知道DB2可以支持PLSQL, 其实还有GreenPlum
和Postgre 可以用plpgSQL, 基本上和PLSQL大同小异.
在服务器端, plsql是很不错的一种语言.

【在 O***T 的大作中提到】
: 哦,这样啊,太谢谢了
:
: with

avatar
s*o
13
TSQL是这样的
BEGIN TRANSACTION
BEGIN TRY
// do your SQL statements here
COMMIT TRANSACTION
END TRY
BEGIN CATCH
SELECT
ERROR_NUMBER() AS ErrorNumber,
ERROR_SEVERITY() AS ErrorSeverity,
ERROR_STATE() AS ErrorState,
ERROR_PROCEDURE() AS ErrorProcedure,
ERROR_LINE() AS ErrorLine,
ERROR_MESSAGE() AS ErrorMessage
ROLLBACK TRANSACTION
END CATCH
avatar
l*b
14

Thanks

【在 s**********o 的大作中提到】
: TSQL是这样的
: BEGIN TRANSACTION
: BEGIN TRY
: // do your SQL statements here
: COMMIT TRANSACTION
: END TRY
: BEGIN CATCH
: SELECT
: ERROR_NUMBER() AS ErrorNumber,
: ERROR_SEVERITY() AS ErrorSeverity,

avatar
s*o
15
TSQL毕竟只是MANIPULATE数据的,如果SCHEMA有问题,
或者被改了,一般不用ERROR HANDLE的,直接让STORED PROC
出错,出错了你才知道TABLE被改了或者不存在,否则
谁也不会看那个LOGFILE,数据可能几个月都没LOAD起来
你才发现问题

【在 l******b 的大作中提到】
:
: Thanks

avatar
O*T
16
因为可能还有其他的error存在, 所以想用error handler来处理各种可能的sp
failures.
现在的构想是想用VBA call 这个sp,放在access里给其他人用,一旦sp fail了,
access可以跳出一个窗口,告诉他们程序没有运行成功,但是他们不用知道具体的
error是什么。

【在 s**********o 的大作中提到】
: 难道不能用个
: IF EXISTS SELECT TOP 1 FROM table_b
: BEGIN
: INSERT
: END
: ELSE
: BEGIN
: INSERT into log
: END

avatar
O*T
17
谢谢,学习了

【在 s**********o 的大作中提到】
: TSQL是这样的
: BEGIN TRANSACTION
: BEGIN TRY
: // do your SQL statements here
: COMMIT TRANSACTION
: END TRY
: BEGIN CATCH
: SELECT
: ERROR_NUMBER() AS ErrorNumber,
: ERROR_SEVERITY() AS ErrorSeverity,

相关阅读
logo
联系我们隐私协议©2024 redian.news
Redian新闻
Redian.news刊载任何文章,不代表同意其说法或描述,仅为提供更多信息,也不构成任何建议。文章信息的合法性及真实性由其作者负责,与Redian.news及其运营公司无关。欢迎投稿,如发现稿件侵权,或作者不愿在本网发表文章,请版权拥有者通知本网处理。