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

Minor

Reliability

Reason

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

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

Additionally, business users never say last names should be 50 bytes in length.

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;
/