如何设置 GixSQL 连接

问题描述 投票:0回答:1

我正在开发容器中 COBOL 应用程序的原型。现在我想将它连接到数据库,我找到了 ODBC。但它不起作用,因为我在 docker 构建过程中收到以下错误:

0.141 /function/YTR93.cob: 36: error: SQLCA: No such file or directory
0.141 /function/YTR93.cob: 36: error: syntax error, unexpected Identifier or Literal, expecting .
0.151 /function/YTR93.cob: 34: error: invalid level number 'EXEC'
0.152 cobc: call to cobc_plex_strdup with NULL pointer
0.152 cobc: aborting codegen for /function/YTR92.cob (unknown: unknown)

之后,有人推荐GixSQL来预处理文件。然而,我对安装过程感到很困惑。说明不是很清楚,我发现自己很难理解如何将其与 ODBC 连接。另外,我不确定需要在哪里设置 DATASRC 连接字符串。您介意帮助我以正确的方式安装 GixSQL 吗?提前非常感谢您。

我的 DockerFile:

# Define app directory
ARG FUNCTION_DIR="/function"

FROM --platform=linux/amd64 python:3.10-buster as build-image

# Vermeiden von Interaktionen bei der Installation von Paketen
ENV DEBIAN_FRONTEND=noninteractive

# Install aws-lambda build dependencies
RUN apt-get update && \
  apt-get install -y \
  g++ \
  make \
  cmake \
  unzip \
  wget \
  gnucobol \
  gnucobol-cobsql \
  unixodbc \
  unixodbc-dev \
  wget \
  gnupg \
  default-libmysqlclient-dev \
  make \
  && rm -rf /var/lib/apt/lists/* \
  && wget https://dev.mysql.com/get/Downloads/Connector-ODBC/8.0/mysql-connector-odbc_8.0.29-1ubuntu20.04_amd64.deb \
  && dpkg -i mysql-connector-odbc_8.0.29-1ubuntu20.04_amd64.deb || apt-get -f install -y \
  && apt-get clean \
  && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* /mysql-connector-odbc_*.deb

# Include global arg in this stage of the build
ARG FUNCTION_DIR

# Create function directory
CMD mkdir -p ${FUNCTION_DIR}

# Copy code directory
COPY app/* ${FUNCTION_DIR}/

# Install the runtime interface client
RUN pip install \
  --target ${FUNCTION_DIR} \
  awslambdaric

# Install the AWS Software Development Kit for Python
RUN pip install \
  --target ${FUNCTION_DIR} \
  boto3

# Install requests for Python
RUN pip install \
  --target ${FUNCTION_DIR} \
  requests

# Set environment variables for MySQL Database configuration
ENV MYSQL_DATABASE=bank1 \
  MYSQL_USER=admin \
  MYSQL_PASSWORD=12345    \
  MYSQL_HOST=databasestring \
  MYSQL_PORT=3306

# Setup ODBC Driver in odbcinst.ini
RUN echo "[MySQL]\n\
Description=ODBC for MySQL\n\
Driver=/usr/lib/x86_64-linux-gnu/odbc/libmyodbc8a.so\n\
Setup=/usr/lib/x86_64-linux-gnu/odbc/libmyodbc8S.so\n\
FileUsage=1\n\
Server=$MYSQL_HOST\n\
User=$MYSQL_USER\n\
Password=$MYSQL_PASSWORD\n\
Database=$MYSQL_DATABASE\n\
Port=$MYSQL_PORT" > /etc/odbcinst.ini

# Interaktive Frontend Einstellungen zurücksetzen
ENV DEBIAN_FRONTEND=dialog

# Compile the cobol programs
#RUN cobc -x --free ${FUNCTION_DIR}/YTR93.cob ${FUNCTION_DIR}/YTR92.cob -o ${FUNCTION_DIR}/cobol-program
#RUN cobc -x -free -std=default -I/usr/include/mysql/ ${FUNCTION_DIR}/YTR93.cob -o YTR93 -L/usr/lib -lmysqlclient
RUN cobc -x -std=default -free -I/usr/include/mysql /function/YTR93.cob -o YTR93 -L/usr/lib -lmysqlclient

# Multi-stage build: grab a fresh copy of the base image
FROM python:3.10-buster

# Ensure that the runtime requirements for cobol are met
RUN apt update && apt install libcob4

# Include global arg in this stage of the build
ARG FUNCTION_DIR
# Set working directory to function root directory
WORKDIR ${FUNCTION_DIR}

# Copy in the build image dependencies
COPY --from=build-image ${FUNCTION_DIR} ${FUNCTION_DIR}

ENTRYPOINT [ "/usr/local/bin/python", "-m", "awslambdaric" ]
CMD [ "app.handler" ]

我的科博尔:

PROCEDURE DIVISION.
MAIN-PROCEDURE.

   EXEC SQL
      CONNECT TO :DB-NAME AT :DB-SERVER AS :DB-USER IDENTIFIED BY :DB-PASSWORD
   END-EXEC.

   EVALUATE SQLCODE
      WHEN 0
            DISPLAY "Connected successfully to remote MySQL server."
      WHEN OTHER
            DISPLAY "Connection error: ", SQLERRMC
   END-EVALUATE.

我尝试将其集成到我的应用程序中,但我没有找到通过 Dockerfile 执行它的方法。

docker odbc gnucobol
1个回答
0
投票

如果您想设置 GixSQL,那么您需要安装它。 gnucobol-cobsql 软件包是什么(

ocesql
esqloc
gixsql
?),它来自哪里?

对于 GixSQL,您可以使用 Debian 软件包,它还应该从

其发布页面
自动安装必要的依赖项(因此您的列表可以变得更小 - 并且您可能希望使用较新的
apt
而不是 apt-get)。
对于
ocesql
esqloc
,您可能需要从源代码安装它们。

在任何情况下,您都希望首先

RUN gixsql
(或其他预处理器)转换包含
EXEC SQL
的源,然后
RUN cobc
编译结果。预处理器将直接包含 SQLCA copybook,或者使用类似
-I /path/to/preprocessor
的内容将其包含到 cobc 命令行中。

GixSQL 的文档包含如何使用 ODBC 后端的详细信息 - 但对于 mysql,您可能想直接使用其 mysql 后端。这些将是您的数据源的可能条目:

odbc://MySQL
mysql://databasestring:3306/bank1

我不确定是否支持单独的

AT :DB-SERVER
,如果不支持并且需要,只需在其站点上创建一个功能请求,引用它工作的环境 - 对于您的 ODBC 设置来说,这没有用,因为您已经设置了数据库在那里。

© www.soinside.com 2019 - 2024. All rights reserved.