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

Oracle SQL使用TYPE封装查询结果报ORA-00907缺失右括号错误

ORA-00907(缺失右括号)自定义类型封装场景排查

错误根因

你在调用自定义对象类型uploaded_data的构造函数时,在传入的CASE表达式参数后错误添加了列别名AS IS_DELETABLE。
对象构造函数的括号参数列表内只允许传入值表达式,不支持给单个参数写AS 别名的语法。Oracle解析到这个不属于参数语法的AS关键字时,会判定括号内语法非法,抛出缺失右括号的报错。

注意:ORA-00907属于Oracle的通用语法报错,绝大多数场景下并不是真的漏写了右括号,而是括号覆盖的语法块内出现了不符合位置规则的关键字、符号,导致解析器判定语法块应该提前闭合,才会抛出这个提示。

排查修正步骤

  • 第一步:移除构造函数参数内的别名声明
    把构造函数括号里CASE表达式后面的AS IS_DELETABLE删掉,别名如果需要加,要写在整个构造函数的括号外面,给最终生成的uploaded_data类型列起别名,不能写在构造参数列表里。
  • 修正后参考SQL:
select uploaded_data(
    a.DATA_ID, 
    b.FILE_NAME, 
    b.CREATION_DATE, 
    CASE WHEN a.cdvs_data is null THEN 'N' ELSE 'Y' END
) AS uploaded_data_row
from cl_dat_dst_his c 
inner join CL_DAT_VERSION a on c.CL_DAT_VERSION_ID=a.CL_DAT_VERSION_ID
inner join cl_history b on c.CDVS_HIST_ID = b.CL_HIS_ID  
where b.CL_HIS_TABLE_ID=14424 
ORDER BY b.CREATION_DATE DESC
  • 第二步:类型定义匹配校验
    如果改完别名问题还是报错,核对uploaded_data类型的定义:
    • 传入参数的数量必须和类型定义的属性数量完全一致,当前场景对应4个属性,不能多传也不能少传
    • 参数顺序必须和类型定义的属性顺序一一对应
    • 每个传入值的类型必须和对应属性的类型兼容,比如日期位置不能传字符串、字符串位置不能传数字

内容的提问来源于stack exchange,提问作者Rustam

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 01:42:18