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);
我需要创建批量 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);