Oracle 19c中调用SQL_MACRO函数触发ORA-22905错误求助
解决ORA-22905错误的方法
问题原因
你创建的是标量SQL Macro(返回VARCHAR2类型),但调用时将其当作表函数放在FROM子句中使用,Oracle 19c中这种类型不匹配的用法会触发ORA-22905错误。标量SQL Macro用于生成标量表达式,而表值SQL Macro才支持生成可作为数据源的查询语句。
修正方案
将函数改为表值SQL Macro,调整返回类型为TABLE即可:
CREATE OR REPLACE FUNCTION test_funct(v_var VARCHAR2) RETURN TABLE SQL_MACRO IS BEGIN RETURN q'{SELECT DUMMY FROM DUAL WHERE DUMMY = v_var}'; END; /
验证调用
执行原查询语句即可正常返回结果:
SELECT * FROM test_funct('X');
补充说明
- 标量SQL Macro适用于SELECT列表、WHERE条件等场景,例如定义返回标量表达式的函数后,可使用
SELECT test_funct_scalar('X') FROM DUAL;调用 - 表值SQL Macro专门用于
FROM子句,生成可作为数据源的查询块,匹配你当前的使用场景
内容的提问来源于stack exchange,提问作者AleksRous
相关产品推荐
相关产品推荐

