1
我正在開發一個C++庫與Oracle OCI庫。我從Oracle數據庫11g數據庫加載。這裏我需要用小數點加載大數值。在這種情況下,我需要使用長雙而不是雙。我不確定OCI是否支持長雙。
根據文檔SQLT_FLT僅用於float和double。有人能讓我知道OCI是否支持長雙倍,如果是的話如何檢索它們與雙OCI OCI
我正在開發一個C++庫與Oracle OCI庫。我從Oracle數據庫11g數據庫加載。這裏我需要用小數點加載大數值。在這種情況下,我需要使用長雙而不是雙。我不確定OCI是否支持長雙。
根據文檔SQLT_FLT僅用於float和double。有人能讓我知道OCI是否支持長雙倍,如果是的話如何檢索它們與雙OCI OCI
是的,沒有。
根據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()和十進制字符串。
非常感謝您的想法。 :)由於我是這個領域的新手,如果您可以提供鏈接或幫助提供解決問題的示例代碼,請感謝您。 – user1308004
對不起,但我從未與Oracle合作過。但是項目列表中的第一個鏈接提供了一些可以從頭開始的冗長示例。 –