Multi-byte Character Support
Oracle FLEXCUBE Universal Banking
Release [Link].0
[May] [2019]
Contents
1. INTRODUCTION ........................................................................................................................................... 1-1
1.1 BACKGROUND ............................................................................................................................................ 1-1
1.2 APPROACH.................................................................................................................................................. 1-1
1. Introduction
Oracle FLEXCUBE Universal Banking Solution supports multi-byte characters by means of
setting session-level character length semantics during FCUBS installation using the
NLS_LENGTH_SEMANTICS parameter of Oracle Database. Most of the application code is
written without explicit length semantics (BYTE or CHAR) and, hence, adapts to the session-level
semantics during compilation at the time of FCUBS installation.
1.1 Background
NLS_LENGTH_SEMANTICS parameter allows you to specify the length of a column
datatype/PLSQL variable in terms of characters (CHAR) instead of the default BYTE. Typically,
you would need this if you were to deal with (in PL/SQL code) and store data that contains multi-
byte characters such as Japanese or Mandarin characters.
Oracle strongly recommends that you do not set NLS_LENGTH_SEMANTICS parameter on
instance level (i.e. in the server parameter file) but only use it to alter session-level semantics as
necessary. From MOS note 144808.1:
“Oracle advices to use explicit CHAR semantics in the SQL or PL/SQL syntax
OR
To make sure your application does an "ALTER SESSION SET
NLS_LENGTH_SEMANTICS=CHAR;" when connecting if CHAR semantics is required but the
semantic is not defined explicit in SQL.”
Based on this note and other available documentation for the parameter, we recommend an
approach in the next section, which should be followed in sites where multi-byte character
support is required.
Note:
SR with oracle mentioned below is feasible. (SR 3-16364463401)
1.2 Approach
In situations where PL/SQL code would interact with multi-byte character data and the same kind
of data would be stored in FLEXCUBE tables, follow below approach:
Please note the approach is suggested for 12c and above Database version only.
1. Complete the database installation and set up as per the Oracle FLEXCUBE Database Best
Practices for your FLEXCUBE release.
2. Immediately after creating the FLEXCUBE application user (schema), create a logon trigger
as the SYS user to alter each new session so that the session-level length semantics are
maintained as CHAR for the user at all times. For example, if the schema name were FCUBS
and the trigger was named “FCUSER_LOGON”, the trigger would look like:
CREATE OR REPLACE TRIGGER SYS.FCUSER_LOGON
AFTER LOGON ON [Link]
BEGIN
EXECUTE IMMEDIATE 'alter session set nls_length_semantics=CHAR';
END;
1-1
/
3. Proceed with the rest of the FLEXCUBE installation as per the installation documents.
In situations where an operation results in FLEXCUBE objects being invalidated, make sure the
objects are re-compiled either:
1. By the FLEXCUBE schema user using one of the following options:
a. Manually using ALTER… COMPILE statements
b. SYS.UTL_RECOMP.RECOMP_PARALLEL procedure
c. SYS.UTL_RECOMP.RECOMP_SERIAL procedure
Or,
2. By a user with appropriate privileges on SYS.UTL_RECOMP package (such as the SYS
user) using one of the following options only:
a. SYS.UTL_RECOMP.RECOMP_PARALLEL procedure
b. SYS.UTL_RECOMP.RECOMP_SERIAL procedure
Oracle FLEXCUBE strongly advises against manually compiling FLEXCUBE schema objects
(using ALTER…COMPILE) as a non-FLEXCUBE application user when length semantics of
CHAR are being enforced. Such an attempt may change the NLS_LENGTH_SEMANTICS
parameter setting of the PL/SQL objects to BYTE and this may result in runtime exceptions within
the application, such as:
“ORA-06502- PL/SQL: numeric or value error: character string buffer too small”.
Note:
If the FLEXCUBE schema is ever re-compiled using SYS.DBMS_UTILITY.COMPILE_SCHEMA
in an environment that is using CHAR semantics, then it must be ensured that for the user
executing the procedure, the session-level NLS_LENGTH_SEMANTICS parameter is set to
CHAR. This is because while SYS.UTL_RECOMP.x procedures re-use existing PL/SQL object
settings, SYS.DBMS_UTILITY.COMPILE_SCHEMA compiles the objects with the NLS settings of
the invoking user’s session and may alter the PL/SQL object settings of the objects (including
length semantics).
1-2
Multi-byte Character Support
[July] [2019]
Version [Link].0
Oracle Financial Services Software Limited
Oracle Park
Off Western Express Highway
Goregaon (East)
Mumbai, Maharashtra 400 063
India
Worldwide Inquiries:
Phone: +91 22 6718 3000
Fax:+91 22 6718 3001
[Link]/financialservices/
Copyright © [2007], [2019], Oracle and/or its affiliates. All rights reserved.
Oracle and Java are registered trademarks of Oracle and/or its affiliates. Other names may be trademarks of their
respective owners.
U.S. GOVERNMENT END USERS: Oracle programs, including any operating system, integrated software, any programs
installed on the hardware, and/or documentation, delivered to U.S. Government end users are "commercial computer
software" pursuant to the applicable Federal Acquisition Regulation and agency-specific supplemental regulations. As
such, use, duplication, disclosure, modification, and adaptation of the programs, including any operating system,
integrated software, any programs installed on the hardware, and/or documentation, shall be subject to license terms and
license restrictions applicable to the programs. No other rights are granted to the U.S. Government.
This software or hardware is developed for general use in a variety of information management applications. It is not
developed or intended for use in any inherently dangerous applications, including applications that may create a risk of
personal injury. If you use this software or hardware in dangerous applications, then you shall be responsible to take all
appropriate failsafe, backup, redundancy, and other measures to ensure its safe use. Oracle Corporation and its affiliates
disclaim any liability for any damages caused by use of this software or hardware in dangerous applications.
This software and related documentation are provided under a license agreement containing restrictions on use and
disclosure and are protected by intellectual property laws. Except as expressly permitted in your license agreement or
allowed by law, you may not use, copy, reproduce, translate, broadcast, modify, license, transmit, distribute, exhibit,
perform, publish or display any part, in any form, or by any means. Reverse engineering, disassembly, or decompilation of
this software, unless required by law for interoperability, is prohibited.
The information contained herein is subject to change without notice and is not warranted to be error-free. If you find any
errors, please report them to us in writing.
This software or hardware and documentation may provide access to or information on content, products and services
from third parties. Oracle Corporation and its affiliates are not responsible for and expressly disclaim all warranties of any
kind with respect to third-party content, products, and services. Oracle Corporation and its affiliates will not be
responsible for any loss, costs, or damages incurred due to your access to or use of third-party content, products, or
services.