Подтвердить что ты не робот

Ошибка SQL: ORA-00933: команда SQL неправильно завершена

Я пытаюсь обновить запись в oracle SQL-разработчике с помощью 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

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

4b9b3361

Ответ 1

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

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

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.

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

Ответ 3

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

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

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

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

Ответ 5

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

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'