Pet*_*zov -2 sql oracle oracle10g oracle11g
我有这个Oracle表,用于存储应用程序设置.

这是用于创建表的SQL脚本:
CREATE TABLE "GLOBALSETTINGS"(
"SettingName" Varchar2(40 ) NOT NULL,
"SettingValue" Varchar2(40 )
)
/
-- Add keys for table GLOBALSETTINGS
ALTER TABLE "GLOBALSETTINGS" ADD CONSTRAINT "Key14" PRIMARY KEY ("SettingName")
/
ALTER TABLE "GLOBALSETTINGS" ADD CONSTRAINT "SettingName" UNIQUE ("SettingName")
/
Run Code Online (Sandbox Code Playgroud)
这是我想要使用的SQL语句:
UPDATE GLOBALSETTINGS
SET settingValue =
CASE
WHEN settingName = 'SessionTTL'
THEN '30'
WHEN settingName = 'MaxUsersActive'
THEN '40'
ELSE settingValue
END
WHERE settingName IN ('SessionTTL', 'MaxUsersActive');
Run Code Online (Sandbox Code Playgroud)
但是当我在SQL开发人员中运行它时,我收到以下错误消息:
Error starting at line 1 in command:
UPDATE GLOBALSETTINGS
SET settingValue = case
when settingName = 'SessionTTL' then '30'
when settingName = 'MaxUsersActive' then '40'
else settingValue
end
WHERE settingName in ('SessionTTL', 'MaxUsersActive')
Error at Command Line:7 Column:6
Error report:
SQL Error: ORA-00904: "SETTINGNAME": invalid identifier
00904. 00000 - "%s: invalid identifier"
*Cause:
*Action:
Run Code Online (Sandbox Code Playgroud)
我该如何解决这个问题?
祝彼得
当您使用双引号创建表列时,它们现在区分大小写.
所以你必须一直使用引号.
UPDATE GLOBALSETTINGS
SET "SettingValue" =
CASE
WHEN "SettingName" = 'SessionTTL' THEN '30'
WHEN "SettingName" = 'MaxUsersActive' THEN '40'
ELSE "SettingValue"
END
WHERE "SettingName" IN ('SessionTTL', 'MaxUsersActive');
Run Code Online (Sandbox Code Playgroud)
请重新阅读有关SQL标识符的手册.
http://docs.oracle.com/cd/E11882_01/server.112/e26088/sql_elements008.htm#i27570
特别是段落:
Oracle建议不要对数据库对象名称使用带引号的标识符.