将含TO_NUMBER与VALUE_ERROR异常的Oracle UDF转换为AWS RDS MariaDB
适配AWS RDS MariaDB的
num_check函数 转换后的函数代码
CREATE OR REPLACE FUNCTION num_check(p_string VARCHAR) RETURNS DECIMAL DETERMINISTIC BEGIN DECLARE v_new_num DECIMAL; -- 捕获字符转数字失败的异常,对应Oracle的VALUE_ERROR DECLARE CONTINUE HANDLER FOR SQLSTATE '22018' SET v_new_num = NULL; SET v_new_num = CAST(p_string AS DECIMAL); RETURN v_new_num; END;
核心转换要点
- 数据类型适配:Oracle的
VARCHAR2替换为MariaDB标准的VARCHAR;NUMBER替换为DECIMAL(MariaDB兼容NUMBER别名,但DECIMAL是SQL标准类型) - 异常处理替换:Oracle的
VALUE_ERROR对应MariaDB中SQL状态码22018(无效字符值转换),通过DECLARE CONTINUE HANDLER捕获异常并将结果设为NULL - 转换函数替代:用MariaDB的
CAST()函数替代Oracle的TO_NUMBER(),功能完全匹配 - 可选优化:添加
DETERMINISTIC属性,告知数据库输入相同参数时返回相同结果,利于查询优化
内容的提问来源于stack exchange,提问作者Arun
相关产品推荐
相关产品推荐

