Инструкция обновления PLSQL

#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 уже существует, попробуйте создать или заменить при создании процедуры, если вы хотите ее обновить или создать.