由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
Database版 - DB2 Stored Procedure Error Handler
相关主题
为啥Oracle stored procedure 里面不建议用 temporary table?TSQL->PL SQL
怎么样提高SQL SERVER的编程水平?新手学数据库:到底是从Oracle 还是 SQL server 学起,还是
问个SQL QueryOracle 看来还有很长的路
MSSQL Power Function大家帮忙看看一个sql server set option 的问题
请教一个SQL Server的面试题plsql问题求解答,包子求问
Arithmetic overflow error converting expression to data type floatLooking for a mid-level SQL Server Developer, NJ
Multi-Dimensional Databasesany db2 expert?
migration from SQLServer to OracleSQL debug step into a store procedure from another one (转载)
相关话题的讨论汇总
话题: error话题: db2话题: handler话题: procedure话题: stored
进入Database版参与讨论
1 (共1页)
O***T
发帖数: 124
1
我现在有一个很简单的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的内容。
先谢谢大家了
l******b
发帖数: 39
2
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

O***T
发帖数: 124
3
谢谢,好像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

l******b
发帖数: 39
4

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?
O***T
发帖数: 124
5
哦,这样啊,太谢谢了

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

s**********o
发帖数: 14359
6
难道不能用个
IF EXISTS SELECT TOP 1 FROM table_b
BEGIN
INSERT
END
ELSE
BEGIN
INSERT into log
END
l******b
发帖数: 39
7

从逻辑上说好像是这样子, 但他说的好像是需要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

l******b
发帖数: 39
8

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

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

s**********o
发帖数: 14359
9
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
l******b
发帖数: 39
10

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,

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

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

O***T
发帖数: 124
12
因为可能还有其他的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

O***T
发帖数: 124
13
谢谢,学习了

【在 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,

1 (共1页)
进入Database版参与讨论
相关主题
SQL debug step into a store procedure from another one (转载)请教一个SQL Server的面试题
[转载] a PLSQL questionArithmetic overflow error converting expression to data type float
为啥sqlplus 比 oracle sql developer 强大,强大在哪?谢谢。Multi-Dimensional Databases
DB2面试题求教,谢谢!migration from SQLServer to Oracle
为啥Oracle stored procedure 里面不建议用 temporary table?TSQL->PL SQL
怎么样提高SQL SERVER的编程水平?新手学数据库:到底是从Oracle 还是 SQL server 学起,还是
问个SQL QueryOracle 看来还有很长的路
MSSQL Power Function大家帮忙看看一个sql server set option 的问题
相关话题的讨论汇总
话题: error话题: db2话题: handler话题: procedure话题: stored