在NLS_NUMERIC_CHARACTERS

时间:2016-01-08 10:23:04

标签: sql sql-server oracle delphi-xe nls-lang

我需要创建批量插入/更新查询,为此必须以字符串格式传递ORACLE SQL查询,并且我不能使用参数化查询,因为Delphi中的SQL查询字符串解析存在一些性能问题。

我担心的是,在创建这些查询并传递浮点值时,我是否应该关注数据库的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的值,然后在小数点分隔符为','时触发以下批量查询,或者这是由数据库服务器处理的?

   "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服务器实现?

1 个答案:

答案 0 :(得分:3)

NLS_NUMERIC_CHARACTERS仅在将字符串(varchar)转换为数字或数字转换为字符串时使用。如果转换是隐式的(如第二个示例中所示)或使用to_char()to_number()时显式转换,则无关紧要。

纯SQL数字文字(=常量)始终使用.作为小数分隔符。无论NLS_NUMERIC_CHARACTERS的值如何,始终都会正确处理123.123之类的数字 - 对于SQL Server也是如此。

我不清楚“ SQL Server 的实现”是什么意思。如果它是关于插入多于一行的插入语句,那么SQL Server(和标准SQL)中的等价物将是:

INSERT INTO EMPLOYEE 
  (EMP_ID, EMP_SAL) 
VALUES 
  (123, 123.123),
  (345, 345.345),
  (456, 456.456);
相关问题