C#调用Oracle存储过程SP_PERSONAS_PADRON_BIENES报ORA-06550错误
问题根源
报错的核心原因是C#代码中存储过程名称字符串存在肉眼不可见的非法Unicode字符:
- 观察C#代码的
command.CommandText = "SP_PERSONAS_PADRON_BIENES";这一行,存储过程名称的末尾隐含了零宽度空格类的控制字符,Oracle解析SQL语句时会将这些字符识别为非法符号,因此抛出PLS-00103错误。 - 在SQL Developer中执行正常是因为手动输入存储过程名称时不会携带这类隐藏字符,只有从网页、文档等地方复制粘贴内容时才容易带入这类不可见字符。
- 其他同格式存储过程调用无异常,是因为其他存储过程的名称赋值没有携带这类隐藏字符。
解决方法
- 直接删除原
command.CommandText赋值行中双引号内的所有内容,手动重新输入存储过程名称SP_PERSONAS_PADRON_BIENES,不要使用复制粘贴操作即可解决问题。 - 也可以通过文本编辑器的「显示所有隐藏字符」功能,选中存储过程名称末尾的不可见字符删除即可。
额外优化建议
可以将OracleConnection、OracleCommand对象都用using语句包裹,无需手动判断连接状态关闭,会自动释放资源,避免连接泄漏。
内容的提问来源于stack exchange,提问作者jtorrescr
相关产品推荐
相关产品推荐

