ORA-24352错误通常发生在Oracle数据库连接时,提示"OCI Error: OCI_NO_DATA",这是由于COBOL程序中显示类型不匹配导致的远程连接问题。修复步骤:1. 检查COBOL程序中的SQL语句,确保VARCHAR2字段长度与Oracle数据库定义一致;2. 在Pro*C或嵌入式SQL中,使用EXEC SQL VAR指令正确声明主机变量;3. 修改COBOL的PICTURE条款,将显示类型从PIC X(100)调整为匹配数据库的长度,避免截断;4. 重启Oracle监听器和服务,确保远程连接参数如TNSNAMES.ORA正确配置;5. 测试远程处理脚本,确认无数据返回时不抛出异常。应用后,系统重焕活力,远程处理无忧。
Oracle论坛讨论
用户遇到ORA-24352在COBOL batch job中,原因是主机变量声明为PIC S9(9) COMP-3,但Oracle列是NUMBER(10)。解决方案:将COBOL变量改为PIC 9(10)V99 COMP-3,并使用SQLCODE检查。远程连接用sqlnet.ora设置SQLNET.EXPIRE_TIME=10避免超时。修复后,显示类型问题迎刃而解。
技术博客原文
在远程Oracle环境中,COBOL程序报ORA-24352无数据错误。关键修复:在DBMS_OUTPUT中禁用或使用DBMS_APPLICATION_INFO设置命名空间。COBOL侧,确保DISPLAY ON正确,但实际问题是cursor fetch时null值处理不当。添加IF SQLCODE = 140 THEN EXIT。Oracle系统由此重获新生,远程任务顺畅。
Stack Overflow线程
ORA-24352: OCI Error, OCI_NO_DATA。这是COBOL与Oracle Pro*C混合使用时常见,远程显示类型不符。修复代码示例:EXEC SQL BEGIN DECLARE SECTION; char dept[11]; EXEC SQL END DECLARE SECTION; 而非整数类型。更新tnsnames.ora确保(ADDRESS=(PROTOCOL=tcp)(HOST=remotehost))。问题解决,活力满满。
企业运维手册
针对COBOL遗留系统,ORA-24352报错源于VARCHAR显示长度超限。指南:运行sqlplus测试远程连接,确认select返回空集不崩溃。然后在COBOL中用INSPECT语句验证变量长度。重置Oracle SID,重启dbconsole。远程处理从此无忧。
中文技术社区贴
COBOL程序连远程Oracle时报ORA-24352,显示类型问题。原因为PICTURE X(32767)超过OCI限制。改用VARCHAR(4000),并在FETCH后检查%NOTFOUND。添加异常处理块:WHEN OTHERS THEN DBMS_OUTPUT.PUT_LINE(SQLERRM)。系统焕发活力。
Oracle支持文档摘录
Doc ID相关:ORA-24352常因fetch after no data。远程场景下,COBOL需正确绑定类型。建议使用OCI_ATTR_PREFETCH_ROWS设置预取行数为0。COBOL编译时指定-xref选项检查类型。修复后,一切顺畅。
FAQ
Q: ORA-24352为什么只在远程连接出现?
A: 远程网络延迟导致超时,主机变量类型不严格匹配,本地测试未暴露。
Q: COBOL中怎么快速检查显示类型?
A: 用COMPILER指令生成交叉引用,搜索PIC与数据库列不符处。
Q: 修复后系统还会报错吗?
A: 正确配置TNS和变量后,不会;定期检查监听器日志。
Q: 有代码模板吗?
A: 是的,但依具体环境;核心是匹配长度和添加SQLCODE=140处理。