Using a NUMBER to store an integer is less performant than using a PLS_INTEGER. PLS_INTEGERs require less
storage than NUMBERs, and benefit from the use of hardware math, as opposed to the library math required for NUMBERs. Even
more performant is the SIMPLE_INTEGER subtype of PLS_INTEGER. However, changing to either of these types is only appropriate
under certain circumstances.
PLS_INTEGER is only a candidate for NUMBER with a scale of up to 9.
SIMPLE_INTEGER has the same size limitation, in addition to it’s NOT NULL constraint and lack of overflow checking.
This rule raises an issue when a NUMBER is declared with a scale of 9 or less.
Noncompliant code example
DECLARE
    son NUMBER(1);      -- Noncompliant
    rumbo NUMBER(9);  -- Noncompliant
    conga Number(10);   -- Ignored; falls outside the PLS_INTEGER range
    compalsa PLS_INTEGER;
Compliant solution
DECLARE
    son SIMPLE_INTEGER;
    rumbo PLS_INTEGER;
    conga Number(10);   -- Ignored; falls outside the PLS_INTEGER range
    compalsa PLS_INTEGER;