Рассмотрите возможность написания одной процедуры обновления, которая принимает несколько столбцов и использует DEFAULT NULL
для всех столбцов, которые не являются обязательными (как предложено другими).
Использование NVL
в обновлении будет обновлять только те столбцы, которые вы указали. единственная проблема с этим подходом состоит в том, что вы не можете установить значение NULL
.
PROCEDURE update_record (
in_id IN your_table.id%TYPE,
in_name IN your_table.name%TYPE DEFAULT NULL,
in_address IN your_table.address%TYPE DEFAULT NULL,
in_phone IN your_table.phone%TYPE DEFAULT NULL,
in_...
) AS
BEGIN
UPDATE your_table
SET name = NVL( in_name, name ),
address = NVL( in_address, address),
phone = NVL( in_phone, phone ),
...
WHERE id = in_id;
END update_record;
Вы можете вызвать его с именованными параметрами:
update_record( in_id => 123, in_address => 'New address' );
Это позволяет обновлять несколько столбцов одновременно, когда это необходимо.