1

我需要创建批量插入/更新查询,需要以字符串格式传递 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 server 应该如何实现?

4

1 回答 1

3

NLS_NUMERIC_CHARACTERS 仅在将字符串 ( varchar) 转换为数字或将数字转换为字符串时使用。to_char()使用or时,转换是隐式的(如第二个示例中所示)还是显式的并不重要to_number()

普通 SQL 数字文字 (=constants)始终使用.小数点分隔符。无论 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);
于 2016-01-08T10:32:14.780 回答