Oracle SQL Developer中的区域值格式不匹配

ebdffaop  于 2023-04-20  发布在  Oracle
关注(0)|答案(1)|浏览(120)

我是一个印度的Oracle数据库开发人员,与欧洲客户合作。对于双方,我们都使用SQL Developer(相同版本)进行查询构建。在欧洲,他们曾经写数值,如:amount = 5,6但在印度,我们习惯这样写:amount= 5.6 SQL开发人员也支持这个值,根据地区的基础。所以,挑战是当我们编写sum(amount)查询时,它在我们这边工作得很好,但在欧洲那边失败了,反之亦然。这是一种情况,但其他一些值格式的挑战也存在。
欧洲:

Select Sum(amount) from Account;
**Output:** 234,567

印度:

Select Sum(Amount) from Account;
**output:** ORA-00909: invalid number of arguments
00909. 00000 -  "invalid number of arguments"

因此,任何人都可以建议我们如何克服这种情况。因为我正在与欧洲客户合作,我想采用支持SQL Developer的欧洲值格式。

我试图从我的客户端安装相同的链接,但它不工作。

hzbexzde

hzbexzde1#

在欧洲,他们过去常常写数值,比如:amount = 5,6但在印度,我们习惯这样写:amount= 5.6 SQL developer也支持此值(根据地区)。
更改您的会话,以便您具有与客户端相同的设置。例如,如果您希望将所有默认值(数字分隔符,默认日期格式等)作为法国人,则用途:

ALTER SESSION SET NLS_TERRITORY = 'France';

这将改变:NLS_NUMERIC_CHARACTERS设置为,;默认的字符串到日期(反之亦然)格式为DD/MM/RR;货币为欧元。
您可以使用以下命令查看完整的设置列表:

SELECT * FROM NLS_SESSION_PARAMETERS;

如果您只想更改数字字符,则只需更改该设置:

ALTER SESSION SET NLS_NUMERIC_CHARACTERS = ', ';

至于你的第二个问题:
印度:

Select Sum(Amount) from Account;

输出:

ORA-00909: invalid number of arguments
00909. 00000 -  "invalid number of arguments"

NLS_NUMERIC_CHARACTERS设置只影响默认的显示格式,不会阻止您执行任何计算,因为数据库将使用相同的二进制格式来存储数字,而与用于连接数据库的客户端应用程序是否选择以一种格式或另一种格式显示数据无关。
您拥有的似乎是一个名为SUM的本地函数,它隐藏了内置函数,并且您正在调用本地函数而不是内置函数。
正如@astentx所评论的,您可以检查数据字典中的此类示例:

SELECT * FROM ALL_OBJECTS WHERE OBJECT_NAME = 'SUM';

(但是,我无法优先调用内置聚合函数的本地函数,因此无法复制错误。)
fiddle

相关问题