首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Microfocus cobol无法使用DSN连接到postgres

Microfocus cobol无法使用DSN连接到postgres
EN

Stack Overflow用户
提问于 2018-08-01 14:30:34
回答 1查看 625关注 0票数 0

我正在UNIX机器上编写Microfocus COBOL代码,并尝试使用已经创建的系统DSN连接到Postgres数据库,并在代码中执行以下SQL查询以连接到该数据库:

代码语言:javascript
复制
EXEC SQL CONNECT TO ‘SYSTEM_DSN’ USER ‘username.password’ END-EXEC.

然而,当我提交Microfocus COBOL代码的JCL时,我在响应中得到了以下错误:

代码语言:javascript
复制
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,详细信息如下:-

代码语言:javascript
复制
[DTF_Postgres_DSN]
Driver=/usr/edb/connectors/odbc/edb-odbc.so
EN

回答 1

Stack Overflow用户

发布于 2018-08-01 22:37:38

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

很可能所显示的EXEC SQL被预编译器翻译成CALL 'sqlastrt',而这个模块/函数在COBOL运行时环境中找不到。

选项:

  • 如果某个地方有一个同名的模块:将它的目录包含在COBOL运行路径中(并与ldd检查它的依赖项是否在LD_LIBRARY_PATH中),否则either
  • pre-load提供此函数的共享对象(postgresql/odbc库)(还要验证ldd没有显示任何缺少的依赖项)或
  • 确保您的编译器对生成的CALL使用静态链接并链接到postgresql/odbc库,这样在COBOL运行时内就不会有动态模块搜索。相反,当COBOL程序被加载到内存

中时,系统将加载它

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

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51626695

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档