使用 InstantSQL RMCobol 进行 Postgres 更新

Postgres update using InstantSQL RMCobol

提问人:user22426344 提问时间:11/17/2023 最后编辑:user207421user22426344 更新时间:11/18/2023 访问量:44

问:

我需要使用来自同一表和 cobol 字段的字段更新 Postgres 中的列

    update mytable
    set col1 = (col2 * ?) + (col3 * ?) + (col4 * ?);

这里?是 COBOL 字段。 col2、3 和 4 是整数,col1 是小数 (5,2)

我已经绑定了 cobol 参数,如下所示:

      *bind parameters
        SQL BIND PARAMETER sql-QueryHandle
          1 sql-Numeric sql-Param-Input WS-fld1 OMITTED
          2 sql-Numeric sql-Param-Input WS-fld2 OMITTED
          3 sql-Numeric sql-Param-Input WS-fld3 OMITTED.

Cobol 字段值为

1. field 1 = 020.00
2. field 2 = 030.00
3. field 3 = 040.00

程序运行没有错误,但结果始终显示为 0 列 1。

但是在同一个 SQL 中,如果我直接具有如下 cobol 值,则 col1 具有正确的值:

    update mytable
    set col1 = (col2 * 020.00) + (col3 * 030.00) + (col4 * 040.00);

我尝试过使用sql-Numeric和sql-Decimal进行绑定,但输出没有差异。

SQL PostgreSQL COBOL

评论


答:

1赞 Maimoona Abid 11/17/2023 #1

确保 Cobol 字段和 PostgreSQL 列在精度/小数位数和数据类型方面匹配。对于整数列,请使用 sql-Integer,对于十进制列,请使用 sql-Decimal。 在执行 SQL 查询之前,请检查 WS-fld1、WS-fld2 和 WS-fld3 的值是否有效。如果 col1 是十进制,则使用 sql-Decimal 作为输出参数。 试试这个;

*bind parameters
SQL BIND PARAMETER sql-QueryHandle
  1 sql-Integer sql-Param-Input WS-fld1 OMITTED
  2 sql-Integer sql-Param-Input WS-fld2 OMITTED
  3 sql-Integer sql-Param-Input WS-fld3 OMITTED
  4 sql-Decimal sql-Param-Output WS-Col1 OMITTED.

评论

1赞 user22426344 11/17/2023
谢谢。出于某种原因,整数 col2/col3/col4 乘以 cobol decimal 时得到 0。当我进行强制转换(col1 到十进制)然后乘以 cobol 十进制时,它工作正常。