IBM DB2 LUW BOOLEAN 和 CLI SQLBindParameter for NULL

IBM DB2 LUW BOOLEAN and CLI SQLBindParameter for NULL

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

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

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

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

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

或:

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

[IBM][CLI 驱动程序] CLI0164E 可空类型超出范围。 SQL状态=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.

谢谢! 塞布

我们安装了 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 创建一个支持案例。

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