簡體   English   中英

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 列的表中插入一行。

我使用與 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 驅動程序] CLI0164E 可空類型超出范圍。 SQLSTATE=HY099

我不明白為什么...

有什么線索嗎?

這里有一些 SQL 來說明 DB2 的 BOOLEAN 類型用法:

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 中修復 問題已解決。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM