"Formal OUT and IN OUT parameters can be returned in any order"

Hi,
From the PL/SQL Language Reference (11.2):
Formal OUT and IN OUT parameters can be returned in any order. In this example, the final values of x and y are undefined:
CREATE OR REPLACE PROCEDURE p (x OUT INTEGER, y OUT INTEGER) AS
BEGIN
x := 17; y := 93;
END;
What does this mean?  How are the values of x and y in any doubt here? I tested it and x and y were set to 17 and 93 respectively.
Thanks in advance,
Jason

FrankKulash wrote:
I wouldn't count on variable a being 93 after running this (though it has been 93 every time I've tried it).
Right, even though it is quite logical OUT parameters are assigned in parameter number order (which is what Oracle is using in 10G & 11G - can't test on older versions), I didn't see it in documentation, so we can't assume it.
SQL> CREATE OR REPLACE PROCEDURE p (x OUT INTEGER, y OUT INTEGER) AS
  2  BEGIN
  3  x := 17;
  4  y := 93;
  5  END;
  6  /
Procedure created.
SQL> DECLARE
  2      a   INTEGER;
  3  BEGIN
  4      p (a, a);
  5      dbms_output.put_line (a || ' = a aftr calling p (a, a)');
  6  END;
  7  /
93 = a aftr calling p (a, a)
PL/SQL procedure successfully completed.
SQL> CREATE OR REPLACE PROCEDURE p (x OUT INTEGER, y OUT INTEGER) AS
  2  BEGIN
  3  y := 93;
  4  x := 17;
  5  END;
  6  /
Procedure created.
SQL> DECLARE
  2      a   INTEGER;
  3  BEGIN
  4      p (a, a);
  5      dbms_output.put_line (a || ' = a aftr calling p (a, a)');
  6  END;
  7  /
93 = a aftr calling p (a, a)
PL/SQL procedure successfully completed.
SQL> CREATE OR REPLACE PROCEDURE p (y OUT INTEGER, x OUT INTEGER) AS
  2  BEGIN
  3  x := 17;
  4  y := 93;
  5  END;
  6  /
Procedure created.
SQL> DECLARE
  2      a   INTEGER;
  3  BEGIN
  4      p (a, a);
  5      dbms_output.put_line (a || ' = a aftr calling p (a, a)');
  6  END;
  7  /
17 = a aftr calling p (a, a)
PL/SQL procedure successfully completed.
SQL> CREATE OR REPLACE PROCEDURE p (y OUT INTEGER, x OUT INTEGER) AS
  2  BEGIN
  3  y := 93;
  4  x := 17;
  5  END;
  6  /
Procedure created.
SQL> DECLARE
  2      a   INTEGER;
  3  BEGIN
  4      p (a, a);
  5      dbms_output.put_line (a || ' = a aftr calling p (a, a)');
  6  END;
  7  /
17 = a aftr calling p (a, a)
PL/SQL procedure successfully completed.
SQL>
SY.

Similar Messages

Maybe you are looking for