我正在UNIX框上使用Microfocus COBOL代码,并尝试使用已创建的系统DSN连接到Postgres数据库,并且要连接到该数据库,我正在代码中的SQL Query下面执行:-
EXEC SQL CONNECT TO ‘SYSTEM_DSN’ USER ‘username.password’ END-EXEC.
但是,当我为Microfocus COBOL代码提交JCL时,响应中出现以下错误:-
JCLCM0188I J0003556 BE24010R JOB STARTED 01:02:56
CASKC0027E Error executing service 'PGM#AR641010' Load error : file 'sqlastrt' error code: 173, pc=F97, call=1, seg=0 173 Called program file not found in drive/directory 01:02:57
JCLCM0192S J0003556 BE24010R STEP ABENDED STEP001 - COND CODE RTS0173 01:02:57
JCLCM0181S J0003556 BE24010R JOB ABENDED - COND CODE RTS0173 01:02:57
在/etc/odbc.ini中使用以下详细信息创建的ODBC驱动程序DSN:-
[DTF_Postgres_DSN]
Driver=/usr/edb/connectors/odbc/edb-odbc.so
答案 0 :(得分:4)
实际上该错误不是说“无法连接到postgres”,而是“未找到调用的程序文件'sqlastrt'”。
很可能预编译器将显示的EXEC SQL
转换为CALL 'sqlastrt'
,并且在COBOL运行时环境中找不到此模块/功能。
选项:
ldd
检查其依赖项位于LD_LIBRARY_PATH
中), em>否则要么 ldd
不会显示任何缺少的依赖项)或 CALL
使用静态链接并针对postgresql / odbc库进行链接,这样,在COBOL运行时中不会进行动态模块搜索,而是当COBOL程序运行时系统会加载它已加载到内存中解决此问题后,您将能够检查postgres / odbc库是否真正找到/读取了您创建的DSN。