Informix Error -4453: Too many global identifiers and literal strings in your program.
Cause and resolution
Too many global identifiers and literal strings in your program.
A table 256K bytes long holds literal strings and identifiers used in the main function and at the global and module levels. The table also holds the identifiers of forms, windows, and cursors. To avoid this error, move some code that uses many literal strings into a separate module or into a function. Alternatively, find a way to initialize character variables without assigning literal strings, for example by reading the initial values from a database or file. Reducing the number of global and module variables will also help.
-4453 The size of the global string table has exceeded the limit of 32767.
The table is used to hold literal strings and identifiers used in the main function and at the global and module levels. The table also holds the identifiers of forms, windows, and cursors. To avoid this error, move some code that uses many literal strings into a separate module or into a function. Alternatively, find a way to initialize character variables without assigning literal strings, for example by reading the initial values from a database or file. Reducing the number of global and module variables will also help. Only 4GL returns this error.
Oninit® Troubleshooting Guidance
Reasons / Common Causes
-4453 covers two related variants, per the official guidance: a 256K-byte table (NewEra) or a 32,767-entry table (4GL) holds literal strings and identifiers used at the main-function, global, and module levels, plus form/window/cursor identifiers, and this program has exceeded it.
- Too many literal strings and identifiers at the global/module level, per the official guidance — the direct, only cause.
Solutions / Resolution
- Move code using many literal strings into a separate module or function, per the official guidance.
- Initialize character variables without literal strings (e.g. reading initial values from a database or file), per the official guidance.
- Reduce the number of global and module variables, per the official guidance.
Examples
Reading initial values instead of hardcoding literals
SELECT default_status INTO status_default FROM config_table WHERE key = 'order_status';
instead of assigning many hardcoded literal strings to module-level variables.
Diagnostic Checks
- Check the program for a large number of global/module-level literal strings and identifiers, and move some into separate modules, functions, or external data sources.
Related Errors / Related Topics
- -4451 — "The size of the pcode generated from this function/report has exceeded the 32K per function limit." A related compiler-size limit, about one function's p-code rather than the whole program's global string table.
- -4454 — "The size of the local string table has exceeded the limit of 32767." A closely related compiler-size limit, about a single function's local string table rather than the program's global one.
The program has too many global identifiers/literal strings — move code into separate modules/functions, or avoid hardcoding literals.