For better readability, and to prevent the PLS-00312: a positional parameter association may not follow a named association
exception
from being raised, do not mix named and positional argument invocations.
Noncompliant code example
SET SERVEROUTPUT ON
DECLARE
PROCEDURE sub(op1 PLS_INTEGER, op2 PLS_INTEGER) AS
BEGIN
DBMS_OUTPUT.PUT_LINE('Sub = ' || (op1 - op2));
END;
BEGIN
sub(10, op2 => 2); -- Noncompliant
sub(op1 => 10, 2); -- Noncompliant - raises PLS-00312: a positional parameter association may not follow a named association
END;
/
Compliant solution
SET SERVEROUTPUT ON
DECLARE
PROCEDURE sub(op1 PLS_INTEGER, op2 PLS_INTEGER) AS
BEGIN
DBMS_OUTPUT.PUT_LINE('Sub = ' || (op1 - op2));
END;
BEGIN
sub(10, 2); -- Compliant
sub(op1 => 10, op2 => 2); -- Compliant
END;
/