【问题标题】:IBM DB2 LUW BOOLEAN and CLI SQLBindParameter for NULLIBM DB2 LUW BOOLEAN 和 CLI SQLBindParameter for NULL
【发布时间】:2020-04-22 01:27:48
【问题描述】:

IBM DB2 LUW 11.1.1.1 引入了 BOOLEAN SQL 数据类型。

使用 IBM CLI,我想通过 SQLBindParameter() 函数将 SQL 参数作为 NULL 传递以在具有 BOOLEAN 列的表中插入一行。

我使用与 MS ODBC SQL Server 和 SAP HANA ODBC 相同的 ODBC 调用、标志和缓冲区。

当使用非 NULL 值时,我可以在 BOOLEAN 列中插入 TRUE/FALSE。

在绑定时将 TRUE/FALSE 值插入我的 BOOLEAN col 可以正常工作:

  • 1/0 与 SQL_C_SHORT + SQL_SMALLINT

或:

  • '1'/'0' with SQL_C_CHAR + SQL_CHAR

但是在将 StrLen_or_IndPtr 指标设置为 SQL_NULL_DATA 时,我在语句执行时收到以下错误:

[IBM][CLI Driver] CLI0164E 可空类型超出范围。 SQLSTATE=HY099

我不明白为什么......

有什么线索吗?

这里有一些 SQL 来说明 BOOLEAN 类型在 DB2 中的用法:

db2 => create table t1 ( pk int, bl boolean ) 
DB20000I  The SQL command completed successfully.
db2 => insert into t1 values ( 101, TRUE )
DB20000I  The SQL command completed successfully.
db2 => insert into t1 values ( 102, FALSE )
DB20000I  The SQL command completed successfully.
db2 => insert into t1 values ( 103, NULL )
DB20000I  The SQL command completed successfully.
db2 => select * from t1 where bl IS NULL
PK          BL
----------- --
        103 -
   1 record(s) selected.
db2 => select * from t1 where bl
PK          BL
----------- --
        101  1
  1 record(s) selected.
db2 => select * from t1 where bl is true
PK          BL
----------- --
        101  1
  1 record(s) selected.
db2 => select * from t1 where bl is false
PK          BL
----------- --
        102  0
  1 record(s) selected.

谢谢! 赛博

【问题讨论】:

  • 布尔值不能为空。很简单。
  • danny117,如果不指定 NOT NULL 约束,SQL 中的 BOOLEAN 列可以为 NULL。
  • 我已经用一些 SQL 更新了问题文本来说明这一点。
  • 喜欢的整数可以为空。不是
  • 这是在 Debian 9 上使用 IBM DB2 LUW 11.5 测试的。

标签: db2 boolean odbc db2-luw sqlbindparameter


【解决方案1】:

IBM 支持人员回答该错误是已知的,并且已在 APAR IT30675 中修复 问题解决了。

【讨论】:

    【解决方案2】:

    我们安装了 11.5.0.0 客户端和服务器。

    我可以用一个简单的 CLI 程序来重现。

    似乎与延迟准备语句选项有关!

    使用 SQL_DEFERRED_PREPARE_OFF 时出现 CLI0164E 错误:

    rcode = SQLSetStmtAttr(m_hstmt, SQL_ATTR_DEFERRED_PREPARE, (SQLPOINTER) SQL_DEFERRED_PREPARE_OFF, 0);

    当不使用此选项时,执行 INSERT 并且可以插入 NULL。

    很奇怪。

    所以是的,这看起来像是一个 DB2 客户端错误...

    我们将在 IBM 开立支持案例。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-06-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-05-01
      相关资源
      最近更新 更多