Try this:
CREATE OR REPLACE PROCEDURE Update_Test (
u_f1_ test.f1%TYPE DEFAULT NULL,
u_f2_ test.f2%TYPE DEFAULT NULL,
u_f3_ test.f3%TYPE DEFAULT NULL )
IS
BEGIN
UPDATE test
SET f1 = NVL(u_f1_, f1),
f2 = NVL(u_f2_, f2),
f3 = NVL(u_f3_, f3);
COMMIT;
END Update_Test;
You can pass NULL to the fields you do not want to update.
Few side notes on coding style:
1. See how I have used variable names and table column names. I have used an underscore to end variable names, but no underscore to table column names. It's not a must, but I have found it easier to distinguish between variables and table columns.
2. See how each assignment in the SET clause of update statement is in a new line. I find this style more clearer.
3. See the capitalization: ALLCAPS for keywords/reserved words, SentenceCase for procedure names, simples for the rest. Oh, I use ALLCAPS to things like NVL, MAX, COUNT, ...