2012-08-28 58 views
1

我正在開發一個C++庫與Oracle OCI庫。我從Oracle數據庫11g數據庫加載。這裏我需要用小數點加載大數值。在這種情況下,我需要使用長雙而不是雙。我不確定OCI是否支持長雙。
根據文檔SQLT_FLT僅用於float和double。有人能讓我知道OCI是否支持長雙倍,如果是的話如何檢索它們與雙OCI OCI

回答

1

是的,沒有。

根據server docs on floats,「原生」C類型支持高達雙精度(BINARY_DOUBLE)。然而,NUMBER類型可以存儲:

  • 正數1×110-130至9.99的範圍內...... 9×10125與高達38顯著數字
  • 負數-1 X 10-130至9.99 ... 99 X 10125與高達38顯著數字

long double在x86/AMD64更精確。

因此,您需要使用該類型而不是BINARY_*。不幸的是,developer docs說:

您不應該使用NUMBER作爲外部數據類型。如果您確實使用它,Oracle會以其內部21字節的二進制格式返回數字值,並將在輸入時使用此格式。以下討論僅作爲完整內容。

在另一方面,也有關於文檔:

AFAICS OCINumberFromReal()支持long double;如果你想要更精確的話,那麼你可以使用OCINumberFromText()和十進制字符串。

+0

非常感謝您的想法。 :)由於我是這個領域的新手,如果您可以提供鏈接或幫助提供解決問題的示例代碼,請感謝您。 – user1308004

+0

對不起,但我從未與Oracle合作過。但是項目列表中的第一個鏈接提供了一些可以從頭開始的冗長示例。 –