IBM DB2 LUW布尔值和CLI SQL绑定参数为空

piztneat  于 2022-12-13  发布在  DB2
关注(0)|答案(2)|浏览(178)

IBM DB2 LUW 11.1.1.1引入了布尔SQL数据类型。
在IBM CLI中,我希望通过SQLBindParameter()函数将SQL参数作为NULL传递,以便在具有BOOLEAN列的表中插入一行。
我使用的ODBC调用、标志和缓冲区与MS ODBC SQL Server和SAP HANA ODBC相同。
当使用非NULL值时,我可以在BOOLEAN列中插入TRUE/FALSE。
在绑定时,将TRUE/FALSE值插入到我的BOOLEAN列中可以正常工作:

  • 使用SQL_C_SHORT + SQL_SMALLINT时的1/0

或:

  • 使用SQL_C_CHAR + SQL_CHAR的“1”/“0”

但是,当将StrLen_or_IndPtr指示符设置为SQL_NULL_DATA时,我在语句执行时得到以下错误:
[IBM][CLI驱动程序] CLI 0164 E可为Null的类型超出范围。SQLSTATE= HY 099
我不明白为什么...
有线索吗?
下面用一些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.
d7v8vwbk

d7v8vwbk1#

我们已经安装了11.5.0.0客户端和服务器。
我可以用一个简单的CLI程序重现。
看来是跟延迟准备语句选项有关!
使用SQL_DEFERRED_PREPARE_OFF时出现CLI 0164 E错误:
如果您有任何问题,请联系我们。如果您有问题,请联系我们。
不使用此选项时,执行INSERT,并且可以插入NULL.
很奇怪。
所以,是的,这看起来像是DB2客户机错误...
我们将在IBM打开一个支持案例。

jdg4fx2g

jdg4fx2g2#

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

相关问题