#plsql #oracle-sqldeveloper
#plsql #oracle-sqldeveloper
Вопрос:
Ну, я пишу процедуру, в которой у меня есть немедленное выполнение. Это мой код.
PROCEDURE upd_row(
table_name VARCHAR2,
set_values VARCHAR2,
conditions VARCHAR2 := NULL)IS
BEGIN
EXECUTE IMMEDIATE 'UPDATE '|| table_name || 'SET' || set_values|| ' WHERE ' || conditions ||')';
END;
Как вы можете видеть, у меня есть 3 параметра. Это код, как я его называю.
table_pkg.upd_row('my_contacts','name=''Nancy Greenberg''','id=2');
Ошибка, которую я получаю: «отсутствует ключевое слово SET»
Ответ №1:
Ошибка заключается в том, что когда вы объединяете SET
ключевое слово с set_values
and table_name
, вы не оставляете пробел между ними, так что это объединяет все эти слова вместе.
Итак, ваш код должен выглядеть следующим образом:
EXECUTE IMMEDIATE 'UPDATE '|| table_name || ' SET ' || set_values|| ' WHERE ' || conditions ;
Кстати, рассмотрите возможность удаления ')'
в конце немедленного выполнения, потому что это приведет к сбою инструкции, потому что нет никакого открытия (
.
Комментарии:
1. Теперь я получаю эту ошибку: 00955. 00000 — «имя уже используется существующим объектом»
2. Не видя всего кода, на самом деле трудно понять, какой объект уже существует, но я предполагаю, что имя создаваемой вами процедуры upd_row уже существует, попробуйте создать или заменить при создании процедуры, если вы хотите ее обновить или создать.