You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.23 20:04:50