为提高效率,提问时请提供以下信息,问题描述清晰可优先响应。
【DM版本】:--03134284194-20240703-234060-20108 Pack1
【操作系统】:WIN10
【CPU】:X64
【问题描述】*:
在自定义函数的异常处理代码输出或返回SQLERRM信息,从匿名块和SELECT语句中调用该函数时,得到的异常信息内容不一致,且不同版本的情况有所差异。
测试内容如下:
--测试函数
CREATE OR REPLACE FUNCTION F_TEST_EX(V_TABNAME VARCHAR2)
RETURN VARCHAR2
AS
V_RET VARCHAR2(100);
BEGIN
EXECUTE IMMEDIATE 'SELECT DUMMY FROM '||V_TABNAME INTO V_RET;
RETURN V_RET;
EXCEPTION WHEN OTHERS THEN
--返回或打印输出SQLERRM,效果一致
RETURN SQLERRM;
--PRINT(SQLERRM);
--RETURN NULL;
END;
--测试匿名块
DECLARE
V_DAT VARCHAR2(100);
BEGIN
V_DAT := F_TEST_EX('DUAL1');
PRINT(V_DAT);
END;
--测试查询语句
SELECT F_TEST_EX('DUAL1');
测试结果如下:
--版本查询语句
SELECT ID_CODE,BUILD_VERSION FROM V$INSTANCE;
20240703版本
--03134284194-20240703-234060-20108 Pack1 1-3-162-2024.07.03-234060-20108-ENT
匿名块返回:无效的表或视图名[DUAL1]
查询语句返回:[0]:执行成功
20240321版本
--03134284172-20240321-222308-20093 1-3-140-2024.03.21-222308-20093-ENT
匿名块返回:无效的表或视图名[DUAL1]
查询语句返回:执行成功
20230726版本
--03134284058-20230726-197096-20046 Pack4 1-3-26-2023.07.26-197096-20046-ENT
匿名块返回:无效的表或视图名[DUAL1]
查询语句返回:无效的表或视图名[DUAL1]
对比结果内容可见,20230726版本是正确的,匿名块和查询语句能够获得到相同的错误信息,而2024的两个版本则有差异
方便的话还请核实,或指点一下调用方式的问题所在。
多谢。
问题验证后回复,请耐心等待。