2016-01-08 23 views
1

我需要創建批量插入/更新查詢,因爲它需要以字符串格式傳遞ORACLE SQL查詢,而且我無法使用參數化查詢,因爲Delphi中的SQL查詢字符串解析。在NLS_NUMERIC_CHARACTERS中插入/更新十進制分隔符逗號的SQL查詢

我的問題是,在創建這些查詢並傳遞float值時,我應該關心數據庫的NLS_NUMERIC_CHARACTERS嗎?現在,我通過我的疑問是:

"INSERT ALL 
    INTO TABLE EMPLOYEE (EMP_ID, EMP_SAL) VALUES (123, 123.123) 
    INTO TABLE EMPLOYEE (EMP_ID, EMP_SAL) VALUES (345, 345.345) 
    INTO TABLE EMPLOYEE (EMP_ID, EMP_SAL) VALUES (456, 456.456) 
    SELECT * FROM DUAL" 

我應該讀NLS_NUMERIC_CHARACTERS的值,而不是再火以下批量查詢,如果小數點分隔符是「」,或該DB服務器處理?

"INSERT ALL 
    INTO TABLE EMPLOYEE (EMP_ID, EMP_SAL) VALUES (123, '123,123') 
    INTO TABLE EMPLOYEE (EMP_ID, EMP_SAL) VALUES (345, '345,345') 
    INTO TABLE EMPLOYEE (EMP_ID, EMP_SAL) VALUES (456, '456,456') 
    SELECT * FROM DUAL" 

應該如何實現SQL服務器?

回答

3

NLS_NUMERIC_CHARACTERS僅在將字符串(varchar)轉換爲數字或字符串時使用。如果轉換是隱含的(如第二個示例中所示),或者在使用to_char()to_number()時是明確的。

普通SQL數字文字(=常數)總是使用.作爲小數點分隔符。無論NLS_NUMERIC_CHARACTERS的值如何,總是會正確處理一個類似123.123的數字 - 對於SQL Server也是如此。

我不清楚你的意思是「的執行方式是SQL服務器」。如果是關於插入語句插入多於一行的話,那麼SQL Server(和標準SQL)中的等價物將是:

INSERT INTO EMPLOYEE 
    (EMP_ID, EMP_SAL) 
VALUES 
    (123, 123.123), 
    (345, 345.345), 
    (456, 456.456); 
+0

好的。這回答了我的問題。謝謝!通過SQL服務器實現,我的意思是如果這樣的小數點分隔符操作也必須在那裏完成。但是這回答我的查詢。 – jetty

相關問題