Oracle PL/SQL函数转DB2 PL/SQL函数:异常处理语法求助
Oracle
EXCEPTION WHEN OTHERS 的 DB2 等效实现 DB2 没有和 Oracle EXCEPTION WHEN OTHERS 完全一一对应的语法,但可以通过**声明异常处理器(HANDLER)**实现捕获所有SQL异常的效果,核心是用 SQLEXCEPTION 匹配所有异常,再结合 EXIT 或 CONTINUE 关键字定义处理器行为。
核心语法说明
DECLARE [EXIT|CONTINUE] HANDLER FOR SQLEXCEPTION 是DB2中捕获全局异常的标准写法:
EXIT:捕获异常后立即退出当前PL/SQL块,后续代码不再执行(和Oracle中WHEN OTHERS块执行后终止逻辑的行为最接近)CONTINUE:捕获异常并执行处理逻辑后,继续执行块中剩余代码SQLEXCEPTION:匹配所有SQL相关异常,对应Oracle的OTHERS
代码示例对比
Oracle 原写法
CREATE OR REPLACE FUNCTION oracle_sample_func(p_input NUMBER) RETURN VARCHAR2 IS BEGIN -- 业务逻辑 RETURN 'SUCCESS'; EXCEPTION WHEN OTHERS THEN -- 异常处理:返回错误信息 RETURN 'ERROR: ' || SQLERRM; END; /
DB2 等效实现(EXIT HANDLER)
CREATE OR REPLACE FUNCTION db2_sample_func(p_input INT) RETURNS VARCHAR(100) LANGUAGE SQL BEGIN DECLARE v_result VARCHAR(100); -- 声明EXIT处理器,捕获所有SQL异常 DECLARE EXIT HANDLER FOR SQLEXCEPTION SET v_result = 'ERROR: ' || SQLERRM; -- 业务逻辑 SET v_result = 'SUCCESS'; RETURN v_result; END@
DB2 可选实现(CONTINUE HANDLER)
如果需要捕获异常后继续执行后续代码,改用CONTINUE:
CREATE OR REPLACE FUNCTION db2_sample_func(p_input INT) RETURNS VARCHAR(100) LANGUAGE SQL BEGIN DECLARE v_result VARCHAR(100); -- 声明CONTINUE处理器,捕获所有SQL异常 DECLARE CONTINUE HANDLER FOR SQLEXCEPTION SET v_result = 'ERROR: ' || SQLERRM; -- 业务逻辑 SET v_result = 'SUCCESS'; -- 异常发生后,此处仍会执行 RETURN v_result; END@
额外提示
- DB2中获取异常信息的函数和Oracle兼容:
SQLERRM返回错误描述,SQLCODE返回错误代码 - 若需捕获特定异常,可将
SQLEXCEPTION替换为具体错误码(如DECLARE EXIT HANDLER FOR SQLCODE -204)
内容的提问来源于stack exchange,提问作者Shivanesh Raghuraman
相关产品推荐
相关产品推荐

