我有一小段代碼可以抓取一些資料并生成 SQL 陳述句以將它們插入 Oracle 資料庫。然后通過 Oracle 服務器上的 JDBC 驅動程式執行這些操作。
我遇到的問題是,如果這些陳述句包含 TO_BINARY_DOUBLE 呼叫,它們總是對我失敗,而不是對我團隊中的任何其他人,據說他們與我有完全相同的驅動程式和環境,這非常奇怪。
CREATE TABLE "SOME_TABLE" (
"_id" BINARY_DOUBLE NOT NULL,
"double" BINARY_DOUBLE,
PRIMARY KEY ("_id")
);
DECLARE
"#value__id" BINARY_DOUBLE;
"#value_double" BINARY_DOUBLE;
BEGIN
"#value__id" := TO_BINARY_DOUBLE('0.0');
"#value_double" := TO_BINARY_DOUBLE('1.2');
INSERT INTO "SOME_TABLE" ("_id", "double")
VALUES(
"#value__id",
"#value_double"
);
END;
和錯誤:
Unable to execute SQL statement batch: error occurred during batching: ORA-06502: PL/SQL: numeric or value error
ORA-06512: at line 5
希望有人可以對來源有所了解,或者指出我正確的方向以嘗試找到它。
uj5u.com熱心網友回復:
您似乎對您的同事有不同的 NLS 設定;具體來說NLS_NUMERIC_CHARACTERS。設定為'.,'代碼有效;將其設定為',.'(即期望逗號作為小數點分隔符,而不是句點)它會引發您看到的錯誤。
您可以更改您的 Java 環境以匹配您同事的環境,這可能涉及更改您的 PC 或通過 JVM 標志的語言環境;或在函式呼叫中覆寫它:
"#value__id" := TO_BINARY_DOUBLE('0.0', '999D999', 'nls_numeric_characters=''.,''');
"#value_double" := TO_BINARY_DOUBLE('1.2', '999D999', 'nls_numeric_characters=''.,''');
使用涵蓋您可能必須處理的任何字串值的格式掩碼 - 我猜這些值通常來自用戶或程序引數。當然,這假設字串值總是有一個句點作為小數分隔符。
db<>小提琴
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/407684.html
標籤:
上一篇:向舊表添加主鍵列
