Function Procedure Packages Oracle PLSQL Tutorial

SQL>
SQL> CREATE OR REPLACE PROCEDURE very_confusing (
  2     arg1   IN              VARCHAR2
  3   , arg2   IN OUT          VARCHAR2
  4   , arg3   IN OUT NOCOPY   VARCHAR2
  5  )
  6  IS
  7  BEGIN
  8     arg2 := 'Second value';
  9     DBMS_OUTPUT.put_line ('arg2 assigned, arg1 = ' || arg1);
 10     arg3 := 'Third value';
 11     DBMS_OUTPUT.put_line ('arg3 assigned, arg1 = ' || arg1);
 12  END;
 13  /
Procedure created.
SQL>
SQL> DECLARE
  2     str   VARCHAR2 (100) := 'First value';
  3  BEGIN
  4     DBMS_OUTPUT.put_line ('str before = ' || str);
  5     very_confusing (str, str, str);
  6     DBMS_OUTPUT.put_line ('str after = ' || str);
  7  END;
  8  /
PL/SQL procedure successfully completed.
SQL>