Ошибка SQL: ORA-00933: команда SQL неправильно завершена - PullRequest
21 голосов
/ 20 января 2012

Я пытаюсь обновить запись в Oracle SQL Developer с помощью Joins. Следующий мой запрос-

UPDATE system_info set field_value = 'NewValue' 
FROM system_users users 
JOIN system_info info ON users.role_type = info.field_desc 
where users.user_name = 'uname'

Однако, когда я попытался выполнить его, я получил следующую ошибку-

Error report: SQL Error: ORA-00933: SQL command not properly ended 
              00933. 00000 - "SQL command not properly ended"

Я пытался удалить JOINS

UPDATE system_info info 
SET info.field_value = 'NewValue' 
FROM system_users users 
where users.user_name = 'uname' AND users.role_type = info.field_desc

но все еще с той же ошибкой кто-нибудь может сказать мне причину ошибки и решение

Ответы [ 5 ]

25 голосов
/ 23 октября 2015

Точка с запятой ; в конце команды вызвала ту же ошибку на мне.

cmd.CommandText = "INSERT INTO U_USERS_TABLE (USERNAME, PASSWORD, FIRSTNAME, LASTNAME) VALUES ("
                + "'" + txtUsername.Text + "',"
                + "'" + txtPassword.Text + "',"
                + "'" + txtFirstname.Text + "',"
                + "'" + txtLastname.Text + "');"; <== Semicolon in "" is the cause.
                                                      Removing it will be fine.

Надеюсь, это поможет.

14 голосов
/ 20 января 2012

Oracle не позволяет объединять таблицы в операторе UPDATE. Вам нужно переписать ваше утверждение с помощью сопутствующего суб-выбора

Примерно так:

UPDATE system_info
SET field_value = 'NewValue' 
WHERE field_desc IN (SELECT role_type 
                     FROM system_users 
                     WHERE user_name = 'uname')

Полное описание (действительного) синтаксиса оператора UPDATE приведено в руководстве:

http://docs.oracle.com/cd/E11882_01/server.112/e26088/statements_10008.htm#i2067715

2 голосов
/ 21 октября 2015

Не совсем фактический контекст этого вопроса, но это исключение может быть воспроизведено следующим запросом:

update users set dismissal_reason='he can't and don't want' where userid=123

Одинарные кавычки в словах can't и don't прервали строку.В случае, если в строке есть только одна внутренняя кавычка, например, «он не хочет», оракул выбрасывает более релевантную строку в кавычках, неправильно завершенную ошибка, но в случае двух SQL-команд неправильно завершенных isвыброшены.

Сводка: проверьте ваш запрос на двойные одинарные кавычки.

1 голос
/ 20 января 2012

Ваш запрос должен выглядеть как

UPDATE table_name
SET column1=value, column2=value2,...
WHERE some_column=some_value

Вы можете проверить приведенный ниже вопрос о помощи

0 голосов
/ 20 января 2012

это очень верно для оракула, так как sql "пользователи" это зарезервированные слова просто измените его, это будет служить вам лучше, если вы хотите изменить это на

UPDATE system_info set field_value = 'NewValue' 

FROM system_users users JOIN system_info info ON users.role_type = info.field_desc where users.user_name = 'uname'

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...