== Why is this an issue?

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

[source,sql]
----
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

[source,sql]
----
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;
/
----

ifdef::env-github,rspecator-view[]

'''
== Implementation Specification
(visible only on this page)

=== Message

Use only named or only positional arguments.


endif::env-github,rspecator-view[]
