我目前正在尝试运行一个带有嵌入式 sql 的 cobol pgm,该 sql 调用 postgresql 中的数据库。我在 cygwin 上运行 (GnuCOBOL) 2.2.0。
我已经按照步骤https://github.com/opensourcecobol/Open-COBOL-ESQL。我设法执行了所有步骤。但是,当我运行 pgm 时,我得到 OCESQL Connect not found 信息,如下所示:$ ./INSERTTBL * 插入 TTBL 已开始 * libcob:未找到模块‘OCESQLConnect’
我怀疑是“make install”期间 libocesql.so 没有在 /usr/local/lib 中创建,但我不确定为什么没有创建。因此我无法添加到 env >> export COB_PRE_LOAD=/usr/local/lib/libocesql.so 中。对于 ld 库,我已在 export LD_LIBRARY_PATH=/usr/local/lib 下添加。
谢谢。
答案1
在Windows 10操作系统上:
从以下位置下载 esqlOC 组件http://www.kiska.net/opencobol/esql/
使用选项:适用于 Windows x86-64 (AMD-64) 和 x86 (win32) 的 ESQL 预处理器和运行时二进制文件
此链接下载文件 BINARIES.ZIP
将 BINARIES.ZIP 文件解压到 OpenCobolIDE4.7.6 文件夹中
例如:C:\Program Files (x86)\OpenCobolIDE\GnuCOBOL
包含 esqlOC 组件的二进制文件夹
- 在 IDE 中“首选项”选项的 SQL COBOL 表中包含 esqlOC 文件夹中的新子文件夹二进制文件:此项包含是为了让预编译器能够处理扩展名为“.Sqb”(带有 SQL 语句的 Cobol)的程序
- 还要在 IDE 中的选项 COMPILER 表“Preferences”中包含二进制子文件夹的路径。还要在此表的 Associatedextensions 中包含扩展名“.SQB”。
生成一个扩展名为.sqb 的新程序 cobol (COBOL WITH EXEC SQL)
包括与数据库的连接。
a. 包括以下工作领域:
EXEC SQL BEGIN DECLARE SECTION END-EXEC. 01 HOSTVARS. 05 BUFFER PIC X(1024). 05 hVarD PIC S9(5)V99. 05 hVarC PIC X(50). 05 hVarN PIC 9 (12). EXEC SQL END DECLARE SECTION END-EXEC.
b. 在程序部分中包括以下句子:
*--------------------------------------------------------------------- *
连接到数据库
也可以使用 DSN:'youruser/yourpasswd@yourODBC_DSN'
----------------------------------------------------------------------STRING 'DRIVER = {MySQL ODBC 5.1 Driver};' 'SERVER = localhost;' 'PORT = 3306;' 'DATABASE = database;' 'USER = mysql user;' 'PASSWORD = mysql password ;'
*---------------------------------------------------------------- ----------------*
- DB 特定 ODBC 参数的示例:
- 没有压缩的 MySQL 连接(无论如何都是默认的)
- ------------------------------------------------- ---------------- *
-
'COMRESSED_PROTO = 0;' INTO BUFFER. EXEC SQLCONNECT TO: BUFFER END-EXEC.
编译带有.SQB扩展名的程序。它会发出以下错误,但这是正常的:
“C:\Program Files (x86)\OpenCobolIDE\GnuCOBOL\bin/ld.exe:找不到 -locsql.libcollect2.exe:错误:ld 返回 1 退出状态”
打开预编译器生成的.COB扩展名的cobol程序
仅编译.COB扩展名的程序,而不对其进行修改。
执行。
答案2
首先:您需要下载并安装Open-COBOL-ESQL-1.2:Open-COBOL-ESQL-1.2.tar.gz
$ export CPPFLAGS="-I/opt/pgsql/include"
$ export LDFLAGS="-L/opt/pgsql/lib"
$ ./configure
$ make
$ sudo make install
第二步:导出这些标志:
export COPY=/Users/francisco/Downloads/Open-COBOL-ESQL-1.2/copy
export SCR=/usr/local/share/gnucobol/copy
export OC_OBJ=/Users/francisco/Downloads/Open-COBOL-ESQL-1.2/dblib
第三:编译.cbl
ocesql random.cbl random.cob
第四:使可执行文件
cobc -x random.cob $OC_OBJ/ocdb.o $OC_OBJ/ocdblog.o $OC_OBJ/ocdbutil.o $OC_OBJ/ocesql.o $OC_OBJ/ocpgsql.o -I$COPY -I$SCR -locesql -lpq
最后(祝你好运):
./random