Variables and fields declared as ``++NOT NULL++`` must be immediately initialized, since they cannot be implicitly initialized to ``++NULL++``. This rule prevents ``++PLS-00218++`` exceptions from being raised at runtime.


== Noncompliant Code Example

----
SET SERVEROUTPUT ON

DECLARE
  test PLS_INTEGER; -- This variable is implicitly initialized to NULL

  foo PLS_INTEGER NOT NULL; -- Noncompliant PLS-00218 a variable declared NOT NULL must have an initialization assignment

  TYPE myType IS RECORD(
    foo PLS_INTEGER NOT NULL, -- Non-Compliant PLS-00218 a variable declared NOT NULL must have an initialization assignment
    bar PLS_INTEGER NULL
  );
BEGIN
  IF test IS NULL
    DBMS_OUTPUT.PUT_LINE('test is NULL');
  ELSE
    DBMS_OUTPUT.PUT_LINE('test is NOT NULL');
  END IF;
END;
/
----


== Compliant Solution

----
SET SERVEROUTPUT ON

DECLARE
  test PLS_INTEGER; -- This variable is implicitly initialized to NULL

  foo PLS_INTEGER NOT NULL := 42; -- Compliant

  TYPE myType IS RECORD(
    foo PLS_INTEGER NOT NULL := 42, -- Compliant
    bar PLS_INTEGER NULL
  );
BEGIN
  IF test IS NULL
    DBMS_OUTPUT.PUT_LINE('test is NULL');
  ELSE
    DBMS_OUTPUT.PUT_LINE('test is NOT NULL');
  END IF;
END;
/
----

