Microfocus Cobol无法使用DSN连接到Postgres

时间:2018-08-01 06:30:34

标签: postgresql cobol dsn jcl microfocus

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

1 个答案:

答案 0 :(得分:4)

实际上该错误不是说“无法连接到postgres”,而是“未找到调用的程序文件'sqlastrt'”。

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

选项:

  • 如果某个模块的名称与某处相同:将其目录包含在COBOL运行路径中(并使用ldd检查其依赖项位于LD_LIBRARY_PATH中), em>否则要么
  • 预加载提供此功能的共享库(postgresql / odbc库)(还要验证ldd不会显示任何缺少的依赖项)
  • 确保您的编译器对生成的CALL使用静态链接并针对postgresql / odbc库进行链接,这样,在COBOL运行时中不会进行动态模块搜索,而是当COBOL程序运行时系统会加载它已加载到内存中

解决此问题后,您将能够检查postgres / odbc库是否真正找到/读取了您创建的DSN。