IBM DB2 LUW BOOLEAN和CLI SQLBindParameter for NULL
IBMDB2LUW11.1.1.1引入了布尔SQL数据类型 使用IBM CLI,我希望通过使用SQLBindParameter()函数将SQL参数传递为NULL,以便在具有布尔列的表中插入行 我使用的ODBC调用、标志和缓冲区与MS ODBC SQL Server和SAP HANA ODBC相同 当使用非空值时,我可以在布尔列中插入TRUE/FALSE 在绑定时,将TRUE/FALSE值插入我的布尔列可以正常工作:IBM DB2 LUW BOOLEAN和CLI SQLBindParameter for NULL,db2,boolean,odbc,db2-luw,sqlbindparameter,Db2,Boolean,Odbc,Db2 Luw,Sqlbindparameter,IBMDB2LUW11.1.1.1引入了布尔SQL数据类型 使用IBM CLI,我希望通过使用SQLBindParameter()函数将SQL参数传递为NULL,以便在具有布尔列的表中插入行 我使用的ODBC调用、标志和缓冲区与MS ODBC SQL Server和SAP HANA ODBC相同 当使用非空值时,我可以在布尔列中插入TRUE/FALSE 在绑定时,将TRUE/FALSE值插入我的布尔列可以正常工作: 1/0,带SQL\u C\u SHORT+SQL\u SMALLINT 或:
- 1/0,带SQL\u C\u SHORT+SQL\u SMALLINT
- 带有SQL\u C\u字符+SQL\u字符的“1”/“0”
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.
谢谢!
Seb我们安装了11.5.0.0客户端和服务器 我可以用一个简单的CLI程序进行复制 它似乎与延迟准备对账单选项有关 我在使用SQL\u DEFERRED\u PREPARE\u OFF时出现CLI0164E错误: rcode=sqlsetstmtr(m_hstmt,SQL_ATTR_DEFERRED_PREPARE, (SQLPOINTER)SQL\u延迟\u准备\u关闭,0) 不使用此选项时,将执行INSERT并可以插入NULL 很奇怪 是的,这看起来像是一个DB2客户端错误
我们将在IBM打开一个支持案例。IBM支持部门回答说,该错误是已知的,并且已在APAR IT30675中修复
问题已解决。布尔值不能为空。足够简单。danny117,如果不指定NOTNULL约束,SQL中的布尔列可以为NULL。我用一些SQL更新了问题文本来说明这一点。Like INTEGER可以为NULL。这是在Debian9上用IBMDB2LUW11.5测试的。