我正在UNIX机器上编写Microfocus COBOL代码,并尝试使用已经创建的系统DSN连接到Postgres数据库,并在代码中执行以下SQL查询以连接到该数据库:
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发布于 2018-08-01 22:37:38
实际上,错误不是说“无法连接到postgres”,而是“找不到调用的程序文件'sqlastrt‘”。
很可能所显示的EXEC SQL被预编译器翻译成CALL 'sqlastrt',而这个模块/函数在COBOL运行时环境中找不到。
选项:
ldd检查它的依赖项是否在LD_LIBRARY_PATH中),否则eitherldd没有显示任何缺少的依赖项)或CALL使用静态链接并链接到postgresql/odbc库,这样在COBOL运行时内就不会有动态模块搜索。相反,当COBOL程序被加载到内存中时,系统将加载它
一旦这个问题得到解决,您将能够检查postgres/odbc库是否真的找到/读取了您创建的DSN。
https://stackoverflow.com/questions/51626695
复制相似问题