Oracle存储过程动态SQL执行报ORA-00904无效标识符问题求助
ORA-00904报错问题排查与修复方案
你当前的报错和列名TPST_SRV_CONTACT_DTE无关,报错信息明确指向标识符CIT_DW_ETL.TO_NUMBER_VALIDATE无效,即Oracle找不到该函数对象,可按以下步骤排查修复:
- 第一步:验证函数是否存在
用当前执行存储过程的用户执行以下查询,确认函数对象存在:
如果查询无返回结果,说明SELECT * FROM ALL_OBJECTS WHERE OWNER = 'CIT_DW_ETL' AND OBJECT_NAME = 'TO_NUMBER_VALIDATE' AND OBJECT_TYPE = 'FUNCTION';CIT_DW_ETL用户下没有创建该函数,需要先补建函数。 - 第二步:校验执行权限
如果上述查询能查到函数,说明当前用户没有该函数的执行权限,需要登录CIT_DW_ETL用户给存储过程所属用户授权:GRANT EXECUTE ON CIT_DW_ETL.TO_NUMBER_VALIDATE TO 你的存储过程所属用户名; - 第三步:检查函数调用格式是否正确
如果该函数是封装在CIT_DW_ETL用户下的某个包中,调用时需要补充包名,格式为:CIT_DW_ETL.包名.TO_NUMBER_VALIDATE
另外如果建函数时使用了双引号定义小写名称,调用时也需要加双引号匹配大小写:CIT_DW_ETL."to_number_validate"(不建议使用小写加双引号的命名规范) - 关于你提到的单引号问题:当前动态SQL的单引号转义逻辑是正确的,拼接出来的执行SQL里单引号格式没有问题,不是本次报错的原因。
内容的提问来源于stack exchange,提问作者Piyush
相关产品推荐
相关产品推荐

