Microfocus cobol无法使用DSN连接到postgres



我正在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

实际上,错误并没有说"无法连接到postgres",而是说"找不到调用的程序文件'sqlastrt'"。

所示的EXEC SQL很可能由预编译器转换为CALL 'sqlastrt',并且在COBOL运行时环境中找不到此模块/函数。

选项:

  • 如果某个地方有一个同名的模块:将其目录包含在COBOL运行路径中(并使用ldd检查其依赖项是否在LD_LIBRARY_PATH中(,否则
  • 预加载提供此函数的共享对象(postgresql/odbc库((同时验证ldd没有显示任何丢失的依赖项(
  • 确保编译器对生成的CALL使用静态链接,并对postgresql/odbc库使用链接,这样就不会在COBOL运行时中进行动态模块搜索,而是在COBOL程序加载到内存中时系统会加载它

一旦这个问题得到解决,您就可以检查postgres/odbc库是否真的找到/读取了您创建的DSN。

相关内容

  • 没有找到相关文章

最新更新