G-2340: Always define your VARCHAR2 variables using CHAR SEMANTIC (if not defined anchored).

Minor

Reliability

Reason

Changes to the NLS_LENGTH_SEMANTIC will only be picked up by your code after a recompilation.

In a multibyte environment a VARCHAR2(10) definition may not necessarily hold 10 characters, when multibyte characters a part of the value that should be stored unless the definition was done using the char semantic.

Example (bad)

1
2
3
4
create or replace package types is
   subtype description_type is varchar2(200);
end types;
/

Example (good)

1
2
3
4
create or replace package types is
   subtype description_type is varchar2(200 char);
end types;
/