【问题标题】:How get one record in DB2 using cics and cobol program如何使用 cics 和 cobol 程序在 DB2 中获取一条记录
【发布时间】:2014-06-12 08:14:11
【问题描述】:

我有一张桌子叫room_table

room_no room_status  room_type
-------|-----------|----------
1001   | A         |single
1002   | A         |single
1003   | B         |single

我在 CICS COBOL 程序中使用以下代码,但我得到的是 SQL error code -811

    select room_no 
    from room_table 
    where room_status='A' 
      and room_type ='single'
    fetch first 1 row only

我也使用过游标概念,但它返回error code -311

有什么想法吗?

【问题讨论】:

  • 除了您的语句在语法上不正确(select first... 子句无效)之外,它不可能导致 SQLCODE -811 或 -311。
  • 同意,通过SPUFI或QMF运行检查。 -311 来自光标(我们在这里看不到)。 Q 在上面的评论之后被编辑。您是在测试 SQLCODE 还是它已移动到的变量?移动发生了吗?你不应该只得到第一行的 -811。你在选择 INTO 什么?这个查询是否被解释过?

标签: db2 cobol cics


【解决方案1】:

这本来可以回答的,但是:

  1. 使用游标并且只获取第一条记录,见Cursor
  2. 使用分组方式
从 room_table 中选择 min(room_no) 其中 room_status='A' 和 room_type ='single' 按房间状态分组

【讨论】:

    【解决方案2】:

    您是否尝试过使用 DB2 Fetch-first-clause

    select first 1 row only 替换为fetch first row only

    【讨论】:

    • 对不起,我只取了前 1 行
    【解决方案3】:

    -311 不是 -811:宿主变量有问题。

    对于 -811,我们将“仅获取第一行”。

    现在,

    在此功能可用之前,许多编码人员忽略了 IBM 的警告,并简单地将 -811 视为 OK,因为总是以某种方式返回一个值(尽管没有保证)。我希望任何这样的代码早就被修改过。

    【讨论】:

      猜你喜欢
      • 2016-12-16
      • 2012-05-02
      • 2014-07-10
      • 2015-06-20
      • 1970-01-01
      • 1970-01-01
      • 2014-12-09
      • 2019-06-03
      • 2021-01-24
      相关资源
      最近更新 更多