Insert/Update SQL 查询 NLS_NUMERIC_CHARACTERS 中的小数分隔符逗号

Insert/Update SQL queries for decimal separator comma in NLS_NUMERIC_CHARACTERS

我需要创建批量 insert/update 查询,需要以字符串格式传递 ORACLE SQL 查询,而且我不能使用参数化查询,因为 [=27] 中存在一些性能问题=]查询字符串解析在Delphi.

我担心的是,在创建这些查询和传递浮点值时,我是否应该关注数据库的 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 服务器应该如何实施?

NLS_NUMERIC_CHARACTERS 仅在将字符串 (varchar) 转换为数字或数字转换为字符串时使用。使用 to_char()to_number().

时,转换是隐式的(如第二个示例)还是显式的都没有关系

Plain SQL 数字文字(=常量)总是 使用 . 作为小数点分隔符。无论 NLS_NUMERIC_CHARACTERS 的值如何,像 123.123 这样的数字将始终被正确处理 - 对于 SQL 服务器也是如此。

我不清楚你所说的“实施是针对 SQL 服务器”是什么意思。如果它是关于插入多行的插入语句,那么 SQL 服务器(和标准 SQL)中的等价物将是:

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