Ошибка 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
но по-прежнему имеет ту же ошибку
может ли кто-нибудь сказать мне причину ошибки и решение
Ответы
Ответ 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, которые не были закончены..
Сводка: проверьте свой запрос на двойные одинарные кавычки.
Ответ 4
Ваш запрос должен выглядеть как
UPDATE table_name
SET column1=value, column2=value2,...
WHERE some_column=some_value
Вы можете проверить приведенный ниже вопрос на помощь
Ответ 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'