0

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' 与 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.

谢谢!塞布

4

2 回答 2

0

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

于 2020-01-07T17:28:47.350 回答
0

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

于 2020-01-09T15:43:05.497 回答