我需要创建批量插入/更新查询,为此必须以字符串格式传递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服务器实现?
答案 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);