2016-12-17 2 views

ответ

1

Вам нужно будет использовать динамический SQL для этого что-то подобного. ...

PROCEDURE UPDATE_My_Table 
    (
     pTableName IN USER_TABLES.table_name%type, 
     Param1 IN NVARCHAR2, 
     Param2 IN NUMBER, 
     Param3 IN NVARCHAR2 
) 
    IS 
    BEGIN 
     execute immediate 
      'UPDATE '||pTableName 
      ||' SET Column1 = :1, Column2 = :2' 
      ||' WHERE Column3 = :3' 
     using Param1 , Param2 , Param3; 
    END; 
+0

Спасибо, а что, если я хочу использовать определенные значения вместо передачи значений в качестве параметра? –

+0

в заявлении об обновлении @ M.Ali –

+0

ну, то просто удалите параметры и используйте жестко закодированные значения, логика останется прежней.] –

0

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

PROCEDURE updateTables(
    table_name VARCHAR2, 
    value1  VARCHAR2, 
    value2  VARHCAR2, 
    value3  VARCHAR2 
) 
IS 
BEGIN 
    IF table_name = 'table1' THEN 
    UPDATE table1 
    SET col1 = value1 
    WHERE col2 = value2; 
    ELSIF table_name = 'table2' THEN 
    UPDATE table2 
    SET col1 = value1, 
      col3 = value2 
    WHERE col2 = value3; 
    ELSIF table_name = 'table3' THEN 
    UPDATE table3 
    SET col1 = value3, 
      col2 = value1, 
      col3 = value2 
    WHERE col1 = value3; 
    ELSE 
    RAISE_APPLICATION_ERROR(-20001, 'Invalid Table Name'); 
    END IF; 
END; 
/
+0

Что делать, если слишком много таблиц? Разве неудобно писать блок обновлений для каждой таблицы? Есть ли обходной путь? –

Смежные вопросы