SQL - как обновить таблицу из двух строк одним оператором SQL - PullRequest
0 голосов
/ 16 марта 2012

У меня есть таблица Oracle, которая используется для хранения настроек приложения.

enter image description here

Это сценарий 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")
/

Это оператор SQL, который я хочу использовать:

UPDATE GLOBALSETTINGS
SET settingValue =
  CASE
    WHEN settingName = 'SessionTTL'
    THEN '30'
    WHEN settingName = 'MaxUsersActive'
    THEN '40'
    ELSE settingValue
  END
WHERE settingName IN ('SessionTTL', 'MaxUsersActive');

Но когда я запускаю его в 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:

Как я могу исправитьпроблема?

С наилучшими пожеланиями, Питер

1 Ответ

8 голосов
/ 16 марта 2012

Когда вы создали столбцы таблицы, используя двойные кавычки, они теперь чувствительны к регистру.

Таким образом, вы должны использовать кавычки все время.

UPDATE GLOBALSETTINGS
SET "SettingValue"  =
  CASE
    WHEN "SettingName" = 'SessionTTL' THEN '30'
    WHEN "SettingName" = 'MaxUsersActive' THEN '40'
    ELSE "SettingValue" 
  END
WHERE "SettingName"  IN ('SessionTTL', 'MaxUsersActive');

Пожалуйста, перечитайте руководство по идентификаторам SQL.Особенно этот абзац:

Oracle не рекомендует использовать заключенные в кавычки идентификаторы для имен объектов базы данных.

...