Oracle: обновить данные - PullRequest
0 голосов
/ 06 мая 2018

Как я могу обновить данные с помощью этих параметров процедуры.

 1. p_id_book IN NUMBER;
 2. p_column_name VARCHAR2;
 3. p_value VARCAHR2;

Если я попытаюсь выполнить обновление следующим образом:

CREATE OR REPLACE PROCEDURE uptade_book(p_id_book IN NUMBER,
   p_column varchar2, p_value varchar2)
AS
  begin  
    UPDATE book SET  p_column = p_value WHERE id_book = p_id_book;
  END;

Эти ошибки происходят:

PL / SQL: оператор SQL игнорируется.

PL / SQL: ORA-00904: "p_column: неверный идентификатор.

Есть идеи?

Ответы [ 2 ]

0 голосов
/ 06 мая 2018

Для таких целей вам понадобится динамический sql. Обновление может быть запущено в EXECUTE IMMEDIATE. Рекомендуется использовать <column>%type для параметров, относящихся к именам столбцов.

CREATE OR replace PROCEDURE update_book(p_id_book book.id_book%TYPE,
                                        p_column  VARCHAR2,
                                        p_value   VARCHAR2)
AS
BEGIN
    EXECUTE IMMEDIATE 'UPDATE book SET  '||p_column||' = :p_value 
    WHERE id_book = :p_id_book'
    USING p_value, p_id_book;
END; 

Здесь важно отметить, что, поскольку p_value определен как VARCHAR2, он будет работать нормально, если вы передадите строки или числа. Для типов date и timestamp вы должны соблюдать особую осторожность в отношении передачи правильных форматов. особенно если вы передаете строки (вместо даты), чтобы избежать ошибок из-за неявного преобразования.

0 голосов
/ 06 мая 2018

Я не знаю вашу структуру таблицы book, но что происходит в вашей процедуре, которая показывает вам по ошибке:

PL / SQL: оператор SQL игнорируется: вы попытались выполнить недопустимый блок кода PLSQL (например, хранимой процедуры или функции), но произошла ошибка компиляции.

Oracle / PLSQL: сообщение об ошибке ORA-06550

PL / SQL: ORA-00904: "p_column: неверный идентификатор: вы пытались выполнить инструкцию SQL, в которой указано неверное имя столбца или отсутствует имя столбца. Обычно это происходит, когда вы ссылаетесь на неверный псевдоним в операторе SELECT .

Oracle / PLSQL: сообщение об ошибке ORA-00904

...