| Oracle® Database Globalization Support Guide 10g Release 1 (10.1) Part Number B10749-01 |
|
|
View PDF |
This chapter tells how to set up a globalization support environment. It includes the following topics:
NLS parameters determine the locale-specific behavior on both the cl ient and the server. NLS parameters can be specified in the following ways:
You can include parameters in the initialization parameter file to specify a default session NLS environment. These settings have no effect on the client side; the y control only the server's behavior. For example:
NLS_TERRITORY = "CZECH REPUBLIC"
You can use NLS environment variables, which may be platform-dependent, to specify locale-dependent b ehavior for the client and also to override the default values set for the session in the initialization parameter file. For example, on a UNIX system:
% setenv NLS_SORT FRENCH
ALTER SESSION statement
N
LS parameters that are set in an ALTER SESSION statement can be used to override the default values that ar
e set for the session in the initialization parameter file or set by the client with environment variables.
ALTER SESSION SET NLS_SORT = FRENCH;
| See Also:
Oracle Database SQL Reference
for more information about the |
NLS parameters can be used explicitly
to hardcode NLS behavior within a SQL function. This practice overrides the default values that are set for the session in the initia
lization parameter file, set for the client with environment variables, or set for the session by the ALTER SESSIO
N statement. For example:
TO_CHAR(hiredate, 'DD/MON/YYYY', 'nls_date_language = FRE NCH')
| See Also: <
a name="1009643">
Oracle Datab
ase SQL Reference for more information about SQL functions, including the |
Table 3-1 shows the precedence order of the different methods of setting NLS parameters. Higher priority settings override lower priority settings. For example, a default value has the lowest priority and can be overridden by any other method.
| Priority | Method |
|---|---|
|
1 (highest) |
Explicitly set in SQL functions |
|
2 |
Set by an |
|
3 |
Set as an environm ent variable |
|
4 p> |
Specified in the initialization parameter file |
|
5 |
Default |
Table 3-2 lists the available NLS parameters. Because the SQL function NLS parameters can be specified only with specif ic functions, the table does not show the SQL function scope.
Calendar system
Gr egorian
I, E, A
SQL, PL/SQL operator comparison
BINARY
I, E, A
Credit accounting symbol
Derived from NLS_TERRITORY
E
Local currency symbol
Derived from NLS_TERRITORY
I, E, A
Date format
Der
ived from NLS_TERRITORY
I, E, A
Language for day and month names
Derived from NLS_LANGUAGE
I, E, A
Debit accounting symbol
Derived from NLS_TERRI
TORY
E
ISO international currency symbol
Derived from NLS_TERRITORY
I, E, A
See Also: "Choo sing a Locale with the NLS_LANG Environment Variable"
Language, territory, character set
AMERICAN_AMERICA.
US7ASCII
E
Language
Derived from NLS_LANG
I, A p>
How strings are treated
BYTE
I, A
Character that separates items in a list
Derived fro
m NLS_TERRITORY
E
Monetary symbol for dollar and cents (or their equivalents)
Derived from NLS_TERRITORY
E
Reports data loss during a character type conversion
FALSE
I, A
Decimal character and group se parator
Derived from NLS_TERRITORY
I, E, A
Character sort sequence
Derived from < code>NLS_LANGUAGE
I, E, A
Territory
Derived from NLS_LANG
I, A
Timestamp
Derived from NLS_TERRITORY
I, E, A
Timestamp with time zone
Derived from
I, E, A
Dual currency symbol
Derived from NLS_TERRITORY
I, E, A
A locale is a linguistic and cultural environment in which a system or program is
running. Setting the NLS_LANG environment parameter is the simplest way to specify locale behavior for Oracle software.
It sets the language and territory used by the client application and the database server. It also sets the client's character set,
which is the character set for data entered or displayed by a client program.
NLS_LAN
G is set as a local environment variable on UNIX platforms. NLS_LANG is set in the registry on Windows platforms.
The NLS_LANG parameter has three components: language, territory, and charact
er set. Specify it in the following format, including the punctuation:
NLS_LANG = langu age_territory.charset
For example, if the Oracle Installer d
oes not populate NLS_LANG, then its value by default is AMERICAN_AMERICA.US7ASCII. The language is AM
ERICAN, the territory is AMERICA, and the character set is US7ASCII.
Each component of the NLS_LANG parameter controls the operation of a subset of globalization support features
:
Specifies conventions such as the language used for Oracle messages, sorting, day names, and month names. Each sup
ported language has a unique name; for example, AMERICAN, FRENCH, or GERMAN. The language argu
ment specifies default values for the territory and character set arguments. If the language is not specified, then the value default
s to AMERICAN.
Specifies conventions such as the default date, monetary, and numeric formats. Each supported terri
tory has a unique name; for example, AMERICA, FRANCE, or CANADA. If the territory is not speci
fied, then the value is derived from the language value.
Specifies the character set used by the client application (normally the
Oracle character set that corresponds to the user's terminal character set or the OS character set). Each supported character set ha
s a unique acronym, for example, US7ASCII, WE8ISO8859P1, WE8DEC, WE8MSWIN1252, or
JA16EUC. Each language has a default character set associated with it.
The three components of NLS_LANG can be specified in
many combinations, as in the following examples:
NLS_LANG = AMERICAN_AMERICA.WE8MSWIN1252 NLS_LANG = FRENCH_CANADA.WE8ISO8859P1 NLS_L ANG = JAPANESE_JAPAN.JA16EUC
Note that illogical combinations can be set but do not work properly. For example, the following specification tries to support Japanese by using a Western European char acter set:
NLS_LANG = JAPANESE_JAPAN.WE8ISO8859P1
Because the WE8ISO8859P1 character set does not support any Japanese characters, you cannot store or displ
ay Japanese data if you use this definition for NLS_LANG.
The rest of this sec tion includes the following topics:
See Also:
|
Set NLS_LANG as an environment variable. For example, in a UNIX operating system C-shell sess
ion, you can specify the value of NLS_LANG by entering a statement similar to the following:
% setenv NLS_LANG FRENCH_FRANCE.WE8ISO8859P1
Becau
se NLS_LANG is an environment variable, it is read by the client application at startup time. The client communicates th
e information defined by NLS_LANG to the server when it connects to the database server.
The following examples show how date and number formats are affected by the NLS_LANG parameter.
Set NLS_LANG so that the language is AMERICAN,
the territory is AMERICA, and the Oracle character set is WE8ISO8859P1:
% setenv NLS_LANG American_America.WE8ISO8859P1
Enter a
SQL> SELECT last_name, hire_date, ROUND(salary/8,2) salary FROM employees;
You should see results similar to the following:< /p>
LAST_NAME HIRE_DATE SALARY ---------------------- --- --------- ---------- Sciarra 30-SEP-97 962.5 Urman 07-MAR-98 975 Popp 07-DEC-99 862.5
Set NLS_LANG so that the language is FRENCH, the territory is
FRANCE, and the Oracle character set is WE8ISO8859P1:
% setenv NLS_LANG French_France.WE8ISO8859P1
Then the query shown in Example 3-1 returns the following output:
LAST_NAME HIRE_DAT SALARY ------------------------- -------- ---------- Sciarra 30/09/97 962,5 Urman 07/03/98 975 Popp 07/12/99 862,5
Note that the date format and the n umber format have changed. The numbers have not changed, because the underlying data is the same.
The NLS_LANG parameter sets the language and terri
tory environment used by both the server session (for example, SQL command execution) and the client application (for example, displa
y formatting in Oracle tools). Using this parameter ensures that the language environments of both the database and the client applic
ation are automatically the same.
The language and territory components of the NLS_LA
NG parameter determine the default values for other detailed NLS parameters, such as date format, numeric characters, and ling
uistic sorting. Each of these detailed parameters can be set in the client environment to override the default values if the NL
S_LANG parameter has already been set.
If the NLS_LANG parameter is not
set, then the server session environment remains initialized with values of NLS_LANGUAGE, NLS_TERRRITORY,
and other NLS instance parameters from the initialization parameter file. You can modify these parameters and restart the instance to
change the defaults.
You might want to modify the NLS environment dynamically during the s
ession. To do so, you can use the ALTER SESSION statement to change NLS_LANGUAGE, NLS_TE
RRITORY, and other NLS parameters.
The ALTER
SESSION statement modifies only the session environment. The local client NLS environment is not modified, unless the client e
xplicitly retrieves the new settings and modifies its local environment.
Before Oracle Database 10g Release 1 (10.1), Oracle defined language and territory definitions separately. This resulted in the definition of a territory being independent of the language setti ng of the user. In Oracle Database 10g Release 1 (10.1), some territories can have different date, time, numb er, and monetary formats based on the language setting of a user. This type of language-dependent territory definition is called a lo cale variant.
For the variant to work properly, both NLS_TERRITORY and N
LS_LANGUAGE must be specified. For example, if NLS_LANGUAGE is specified as DUTCH and NLS_TERR
ITORY is not set, then the territory behavior is THE NETHERLANDS. If NLS_TERRITORY is set to B
ELGIUM and NLS_LANGUAGE is not set or it is set to DUTCH, then date, time, number, and monetary form
ats are based on DUTCH behavior. By contrast, if NLS_TERRITORY is set to BELGIUM and NLS
_LANGUAGE is set to FRENCH, then date, time, number, and monetary formats are based on FRENCH behavi
or.
Table 3-3 shows the territories that have been
enhanced to support variations. Default territory behaviors are noted. They occur when NLS_LANGUAGE is not specified.
| Oracle Territory | Oracle Langu age |
|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
< code>CANADA |
|
|
|
|
|
|
|
|
a>
|
|
|
|
|
|
|
|
|
|
a>
|
|
|
|
|
|
|
|
|
|
| <
a name="1010624">
|
|
|
|
|
|
|
|
|
|
|
|
< code>INDIA |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<
a name="1010674">
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
The NLS_LANG character set should reflect the setting of the operating system character set
of the client. For example, if the database character set is AL32UTF8 and the client is running on a Windows operating system, then y
ou should not set AL32UTF8 as the client character set in the NLS_LANG parameter because there are no UTF-8 WIN32 client
s. Instead the NLS_LANG setting should reflect the code page of the client. For example, on an English Windows client, t
he code page is 1252. An appropriate setting for NLS_LANG is AMERICAN_AMERICA.WE8MSWIN1252.
Setting NLS_LANG correctly allows proper conversion from the client operating system characte
r set to the database character set. When these settings are the same, Oracle assumes that the data being sent or received is encoded
in the same character set as the database character set, so no validation or conversion is performed. This can lead to corrupt data
if the client code page and the database character set are different and conversions are necessary.
| <
/a>See Also:
Oracle Database Installation Guide for Windows
for more information about commonly used values of the |
When a new database is created during the execution of the DATABASE statement, the NLS-related database configuration is established. The current NLS instance para
meters are stored in the data dictionary along with the database and national character sets. The NLS instance parameters are read fr
om the initialization parameter file at instance startup.
You can find the values for NLS p arameters by using:
Applications can check the session, instance, and databas e NLS parameters by querying the following data dictionary views:
NLS_SESSION_PARAMETERS shows the NLS parameters and their values for the session that is querying the view. It does
not show information about the character set.NLS_INSTANCE_PARAMETERS shows the current NLS instance parameters that have been explicitly set and the values of the NLS instance parameters.NLS_DATABASE_PARAMETERS shows the values of the NLS parameters for the dat
abase. The values are stored in the database.Applications can check the following NLS dynamic performance views:
V$NLS_VALID_VALUES lists values for the following NLS parameters: NLS_LANGUAGE, NLS_SORT
code>, NLS_TERRITORY, NLS_CHARACTERSETV$NLS_P
ARAMETERS shows current values of the following NLS parameters: NLS_CALENDAR, NLS_CHARACTERSET, NLS_DATE_FORMAT, NLS_DATE_LANGUAGE, NLS_ISO_CURRENCY, NLS_LANGUAG
E, NLS_NUMERIC_CHARACTERS, NLS_SORT, NLS_TERRITORY, NLS_NCHAR_CHARACTERSET
, NLS_COMP, NLS_LENGTH_SEMANTICS, NLS_NCHAR_CONV_EXP, NLS_TIMESTAMP_FORMAT, NLS_TIMESTAMP_TZ_FORMAT, NLS_TIME_FORMAT, NLS_TIME_TZ_FORMAT
User applications can query client NLS
settings with the OCINlsGetInfo() function.
| See Also:
"Getting Locale In
formation in OCI" for the description of |
This section contains information about the following parameters:
| Property | Description< /font> |
|---|---|
|
Parameter type |
String |
|
Parameter scope |
Initialization parameter and |
|
Default value |
Derived from < code>NLS_LANG |
|
Range of values |
Any valid language name |
NLS_LANGUAGE specifies the default con
ventions for the following session characteristics:
TO_CHAR and TO_DATE)NLS_LANGUAGE is set to AMERICAN.)ORDE
R BY is specified. (GROUP BY uses a binary sort unless ORDER BY is specifi
ed.)YES and NO)The value specified for NLS_LANGUAGE in the initialization parameter file is the default for all sessions in th
at instance. For example, to specify the default session language as French, the parameter should be set as follows:
NLS_LANGUAGE = FRENCH
Consider the foll owing server message:
ORA-00942: table or view does not exist
When the language is French, the server message appears as follows:
ORA-00942: table ou vue inexistante
Messages us
ed by the server are stored in binary-format files that are placed in the $ORACLE_HOME/product_name/mesg directory, or the equivalent for your operating system. Multiple versions of these files can exist, one for each
supported language, using the following filename convention:
<product_id>< ;language_abbrev>.MSB
For example, the file containin
g the server messages in French is called oraf.msb, because ORA is the product ID (<product_id>
) and F is the language abbreviation (<language_abbrev>) for French. The product_nam
e is rdbms, so it is in the $ORACLE_HOME/rdbms/mesg directory.
If NLS_LANG is specified in the client environment, then the value of NLS_LANGUAGE in the initial
ization parameter file is overridden at connection time.
Messages are stored in these files in one specific character set, depending on the language and the operating system. If this character set is different from the datab ase character set, then message text is automatically converted to the database character set. If necessary, it is then converted to the client character set if the client character set is different from the database character set. Hence, messages are displayed corr ectly at the user's terminal, subject to the limitations of character set conversion.
The l anguage-specific binary message files that are actually installed depend on the languages that the user specifies during product inst allation. Only the English binary message file and the language-specific binary message files specified by the user are installed.
The default value of NLS_LANGUAGE may be specific to the operating system. You c
an alter the NLS_LANGUAGE parameter by changing its value in the initialization parameter file and then restarting the i
nstance.
| See Also: <
a name="1006526">
Your operating system-specific Oracle documentation for more information about the default value
of |
All messages and text should be in th e same language. For example, when you run an Oracle Developer application, the messages and boilerplate text that you see originate from three sources:
NLS_
LANGUAGE determines the language used for the first two kinds of text. The application is responsible for the language used in
its messages and boilerplate text.
The following examples show behavior that results from
setting NLS_LANGUAGE to different values.
Use the ALTER SESSION
statement to set NLS_LANGUAGE to Italian:
ALTER SESSION SET NLS_LANGUAGE=Ital ian;
Enter a SELECT statement:
< a name="1006539">SQL> SELECT last_name, hire_date, ROUND(salary/8,2) salary FROM employees;
You should see results similar to the following:
LAST_NAM E HIRE_DATE SALARY ------------------------- --------- ---------- Sci arra 30-SET-97 962.5 Urman 07-MAR-98 975 a>Popp 07-DIC-99 862.5
Note that the mo nth name abbreviations are in Italian.
| See Also:
"Overriding Default Values for NLS_
LANGUAGE and NLS_TERRITORY During a Session" for more information about using the |
Use the ALTER SESSION statem
ent to change the language to German:
SQL> ALTER SESSION SET NLS_LANGUAGE=German;
Enter the same SELECT statement:
SQL> SELECT last_name, hire_date, ROUND(salary/8,2) salary FROM employees;
You should see results similar to the following:
LAST_NAME HIRE_DATE SALARY ------------------------- --------- ---------- Sciarra 30-SEP-97 962.5 Urman 07-MÄR-98 975 < /a>Popp 07-DEZ-99 862.5
Note that the l anguage of the month abbreviations has changed.
| Property | Description |
|---|---|
|
Parameter type |
String |
|
Parameter scope |
Initialization parameter and |
|
Default value |
Derived from |
|
Range of values |
Any valid territory name |
NLS_TERRITORY specifies the conventions for the following default date and numeric formatting characterist
ics:
The value specified for NLS_TERRITORY
code> in the initialization parameter file is the default for the instance. For example, to specify the default as France, the parame
ter should be set as follows:
NLS_TERRITORY = FRANCE
When the territory is FRANCE, numbers are formatted using a comma as the decimal character
.
You can alter the NLS_TERRITORY parameter by changing the value in the initi
alization parameter file and then restarting the instance. The default value of NLS_TERRITORY can be specific to the ope
rating system.
If NLS_LANG is specified in the client environment, then the va
lue of NLS_TERRITORY in the initialization parameter file is overridden at connection time.
The territory can be modified dynamically during the session by specifying the new NLS_TERRITORY value in
an ALTER SESSION statement. Modifying NLS_TERRITORY resets all derived NLS session parameters
to default values for the new territory.
To change the territory to France during a session
, issue the following ALTER SESSION statement:
ALTER SESSION SET NLS_TERRITORY = France;
The following examples show behavior that results from
different settings of NLS_TERRITORY and NLS_LANGUAGE.
Enter the following SELECT statement:
SQL> SELECT TO_CHAR(s alary,'L99G999D99') salary FROM employees;
When NLS_TERRITO
RY is set to AMERICA and NLS_LANGUAGE is set to AMERICAN, results similar to the follow
ing should appear:
SALARY -------------------- $24,000.00 $17,000.00 $17,000.00
Use an ALTER SESSION statement to change the territory to Germany:
ALTER SESSION SET NLS_TERRITORY = Germany; Session altered.
Enter the same SELECT statement as before:
SQL> SELECT TO_CHAR(salary,'L99G999D99') salary FROM employees;
You should s ee results similar to the following:
SALARY -------------------- €24.000,00 €17.000,00 €17.000,00
Note that the currency symbol has changed from $ to €. The numbers hav
e not changed because the underlying data is the same.
|
See Also:
"Overriding Default
Values for NLS_LANGUAGE and NLS_TERRITORY During a Session" for more information about using
the |
Us
e an ALTER SESSION statement to change the language to German:
ALTER SESSION S ET NLS_LANGUAGE = German; Sitzung wurde geändert.
Note that the server message now appears in German.
Enter the same SELECT
statement as before:
SQL> SELECT TO_CHAR(salary,'L99G999D99') salary FROM employ ees;
You should see the same results as in Example 3-6:
SALARY -------------------- €24.000,00 €17.000,00 €17.000,00
Use an ALTER SESSION statement to change the territory to America:
ALTER SESSION SET NLS_TERRITORY = America; Sitzung wurde geändert.
Enter the same SELECT statement as in the other examples:
SQL> SELECT TO_CHAR(salary,'L99G999D99') salary FROM employees;
You should see output similar to the following:
SAL ARY -------------------- $24,000.00 $17,000.00 a>$17,000.00
Note that the currency symbol changed from € to
$ because the territory changed from Germany to America.
Default values for NLS_LANGUAGE and NLS_TE
RRITORY and default values for specific formatting parameters can be overridden during a session by using the ALTER SESSION statement.
Set the NLS_LANG environment var
iable so that the language is Italian, the territory is Italy, and the character set is WE8DEC:
% setenv NLS_LANG Italian_Italy.WE8DEC
Enter a SELECT<
/code> statement:
SQL> SELECT last_name, hire_date, ROUND(salary/8,2) salary FROM employ ees;
You should see output similar to the following:
LAST_NAME HIRE_DATE SALARY ------------------------- -------- - ---------- Sciarra 30-SET-97 962,5 Urman 07- MAR-98 975 Popp 07-DIC-99 862,5
Note the language of the month abbreviations and the decimal character.
Use ALTER SESSION statements to change the language, the date format, and the decim
al character:
SQL> ALTER SESSION SET NLS_LANGUAGE=german; Session wurde geändert. SQL> ALTER SESSION SET NLS_DATE_FORMAT='D D.MON.YY'; Session wurde geändert. SQL > ALTER SESSION SET NLS_NUMERIC_CHARACTERS='.,'; Session wurde geändert.
Enter the SELECT statement shown in Example 3-9:
SQL> SELECT last_name, hire_date, ROUND(salary/8,2) salary FROM employees;
You should see output similar to the following:< /p>
LAST_NAME HIRE_DATE SALARY ---------------------- --- --------- ---------- Sciarra 30.SEP.97 962.5 Urman 07.MÄR.98 975 Popp 07.DEZ.99 862.5
Note that the language of the month abbreviations is German and the decimal character is a per iod.
The behavior of the NLS_LANG environment variable implicitly determines t
he language environment of the database for each session. When a session connects to a database, an ALTER SESSION<
/code> statement is automatically executed to set the values of the database parameters NLS_LANGUAGE and NLS_TERRI
TORY to those specified by the language and territory arguments of NLS_LANG. If N
LS_LANG is not defined, then no implicit ALTER SESSION statement is executed.
When NLS_LANG is defined, the implicit ALTER SESSION is executed for all i
nstances to which the session connects, for both direct and indirect connections. If the values of NLS parameters are changed explici
tly with ALTER SESSION during a session, then the changes are propagated to all instances to which that use
r session is connected.
Oracle enables you to contro l the display of date and time. This section contains the following topics:
Different date formats are shown in Table 3-4.
| Country | Description | Example |
|---|---|---|
|
Estonia |
dd.mm.yyyy |
28.02. 2003 |
|
Germany |
dd-mm-rr |
28-02-03 |
|
Ja pan |
rr-mm-dd |
03-02-28 |
|
UK |
dd-mon-rr |
28-Feb-03 |
|
US |
dd-mon-rr |
28-Feb-03 |
This section includes the follow ing parameters:
The NLS_DA
TE_FORMAT parameter defines the default date format to use with the TO_CHAR and TO_DATE functions. T
he NLS_TERRITORY parameter determines the default value of NLS_DATE_FORMAT. The value of NLS_DATE_FOR
MAT can be any valid date format mask. For example:
NLS_DATE_FORMAT = "MM/DD/YYYY" < a name="1006844">
To add string literals to the date format, enclose the string lite ral with double quotes. Note that when double quotes are included in the date format, the entire value must be enclosed by single quo tes. For example:
NLS_DATE_FORMAT = '"Date: "MM/DD/YYYY'
To set the default date format to display Roman numerals for the month, include the follow ing line in the initialization parameter file:
NLS_DATE_FORMAT = "DD RM YYYY"
Enter the following SELECT statement:
SELECT TO_CHAR(SYSDATE) currdate FROM dual;
You sh ould see the following output if today's date is February 12, 1997:
CURRDATE --------- 12 II 1997
The value of <
code>NLS_DATE_FORMAT is stored in the internal date format. Each format element occupies two bytes, and each string occupies t
he number of bytes in the string plus a terminator byte. Also, the entire format mask has a two-byte terminator. For example, "MM/DD/
YY" occupies 14 bytes internally because there are three format elements (month, day, and year), two 3-byte strings (the two slashes)
, and the two-byte terminator for the format mask. The format for the value of NLS_DATE_FORMAT cannot exceed 24 bytes.
p>
You can alter the default value of NLS_DATE_FORMAT by:
ALTER SESSION SET NLS
_DATE_FORMAT statement
| See
Also:
Oracle Database SQL Reference for more information about date format elements and the |
If a table or index is partitioned on a date c
olumn, and if the date format specified by NLS_DATE_FORMAT does not specify the first two digits of the year, then you m
ust use the TO_DATE function with a 4-character format mask for the year.
For example:
TO_DATE('11-jan-1997', 'dd-mon-yyyy')
| See Also:
Oracle Database SQL Reference f
or more information about partitioning tables and indexes and using |
The NLS_DATE_LANGUAGE parameter specifies the language for the day and month names produced by the TO_CHAR and TO_DATE functions. NLS_DATE_LANGUAGE overrides the language that is specified implicitly by NLS_LANGUAGE
code>. NLS_DATE_LANGUAGE has the same syntax as the NLS_LANGUAGE parameter, and all supported languages are
valid values.
NLS_DATE_LANGUAGE also determines the language used for:
TO_CHAR and
TO_DATE functionsNLS_DATE_FORMAT)Set the date language to French:
ALTER SESSION SET NLS_DATE_LANGUAGE = FRENCH
Enter a SELECT statement:
SELECT TO_CHAR(SYSDATE, 'Day:Dd Month yyyy') FROM dual;
You should see output similar to the following:
TO_CHAR(SYSDATE,'DAY:DDMONTHYYYY') --------------------------------------------- --------------- Vendredi:07 Décembre 2001
When numbers are spelled in words using the TO_CHAR function, the English spelling is always used. For example, e
nter the following SELECT statement:
SQL> SELECT TO_CHAR(TO_DATE('12-Oct-20 01'),'Day: ddspth Month') FROM dual;
You should see output simila r to the following:
TO_CHAR(TO_DATE('12-OCT-2001'),'DAY:DDSPTHMONTH') -------------------------------------------------------------------- Vendredi: twelfth Octobre
Month and day abbreviations are determined by NLS_DATE_LANGUA
GE. Enter the following SELECT statement:
SELECT TO_CHAR(SYSDATE, 'Dy:d d Mon yyyy') FROM dual;
You should see output similar to the foll owing:
TO_CHAR(SYSDATE,'DY:DDMO ------------------------ Ve:07 Dec 2001
The default date format uses the mo
nth abbreviations determined by NLS_DATE_LANGUAGE. For example, if the default date format is DD-MON-YYYY,
then insert a date as follows:
INSERT INTO tablename VALUES ('12-Fév-1997') ;
Different time fo rmats are shown in Table 3-5.
| Country | Description | Example |
|---|---|---|
|
Estonia |
hh24:mi:ss |
13:50:23 |
|
Germ any |
hh24:mi:ss |
13:50:23 |
|
Japan |
hh24:mi:ss |
13:50:23 |
|
UK |
hh24:mi:ss |
13:50:23 |
|
US |
hh:mi:ssxff am |
1:50:23.555 PM |
This sectio n contains information about the following parameters:
NLS_TIMESTAMP_FORMAT defines the default date format for
the TIMESTAMP and TIMESTAMP WITH LOCAL TIME ZONE datatypes. The following example shows a value for N
LS_TIMESTAMP_FORMAT:
NLS_TIMESTAMP_FORMAT = 'YYYY-MM-DD HH:MI:SS.FF'
SQL> SELECT TO_TIMESTAMP('11-nov-2000 01:00:00.336', 'dd-mon-yyyy hh:mi:ss.ff') < /a>FROM dual;
You should see output similar to the following:
TO_TIMESTAMP('11-NOV-200001:00:00.336','DD-MON-YYYYHH:MI:SS.FF') -------- ------------------------------------------------------------------- 11-NOV-00 01:00:00.336000000
You can specify the value of NLS_TIMESTAMP_FORMAT by setting it in
the initialization parameter file. You can specify its value for a client as a client environment variable.
You can also alter the value of NLS_TIMESTAMP_FORMAT by:
ALTER SESSION SET NLS_TIMESTAMP_FORMAT statement
See Also:
Ora
cle Database SQL Reference for more information about the TO_TIMESTAMP function and the ALTER SESSION statement
| Property | a> Description |
|---|---|
|
Parameter type |
String |
|
Parameter scope |
<
a name="1009119">
Initialization parameter, environment variable, and |
|
Default value |
Derived from |
tr>
|
R ange of values |
Any valid datetime format mask |
tr>
NLS_TIMESTAMP_TZ_FORMAT defines the default date format for th
e TIMESTAMP and TIMESTAMP WITH LOCAL TIME ZONE datatypes. It is used with the TO_CHAR and
You can specify the value of NLS_TIMESTAMP_TZ_FOR
MAT by setting it in the initialization parameter file. You can specify its value for a client as a client environment variabl
e.
The format value must be surrounded by quotation marks. For example:
< pre class="CE">NLS_TIMESTAMP_TZ_FORMAT = 'YYYY-MM-DD HH:MI:SS.FF TZH:TZM'The following example of the TO_TIMESTAMP_TZ function uses the format value that was spe
cified for NLS_TIMESTAMP_TZ_FORMAT:
SQL> SELECT TO_TIMESTAMP_TZ('2000-08-20 , 05:00:00.55 America/Los_Angeles', 'yyyy-mm-dd hh:mi:ss.ff TZR') FROM dual;< p class="BP">You should see output similar to the following:
TO_TIMESTAMP_TZ('2000-08-20,05 :00:00.55AMERICA/LOS_ANGELES','YYYY-MM-DDHH:M ----------------------------------------------------------------- ---------- 20-AUG-00 05:00:00.550000000 AM AMERICA/LOS_ANGELES
You can change the value of NLS_TIMESTAMP_TZ_FORMAT by:
ALTER SESSION statement.See Also:
|
This s ection includes the following topics:
The following calendar information is stored for each te rritory:
Some cultures consider Sunday to be the first day of the week. Others consider Monday to be the first day of the week. A German calendar starts with Monday, as shown in Table 3-6. p>
| Mo | Di< /th> | |
Do | a> Fr | Sa | So |
|---|---|---|---|---|---|---|
|
- |
- |
- |
- |
- |
- |
1 |
|
2 |
3 |
4 |
5 |
6 |
7 |
8 |
|
9 |
10 |
11 |
12 |
13 |
14 |
15 |
tr>
|
16 |
17 |
18 |
19 |
20 |
21 |
22 |
|
23 |
24 |
25 |
26 |
27 |
29 | |
|
30 |
31 |
- |
- |
- |
- |
- | <
/tr>
The first day of the week is determined by the NLS_TERRITORY
parameter.
Some countries use week numbe rs for scheduling, planning, and bookkeeping. Oracle supports this convention. In the ISO standard, the week number can be different from the week number of the calendar year. For example, 1st Jan 1988 is in ISO week number 53 of 1987. An ISO week always starts on a Monday and ends on a Sunday.
To support the ISO standard, Oracle provides the IW date format element. It return s the ISO week number.
Table 3-7 shows an example i n which January 1 occurs in a week that has four or more days in the first calendar week of the year. The week containing January 1 i s the first ISO week of 1998.
Table 3-8 shows an example in which January 1 occurs in a week that has three or fewer days in the first calendar week of the year. The week containing January 1 is the 53rd ISO week of 1998, and the following week is the first ISO week of 1999.
| Mo | < th class="Formal" align="left" valign="bottom" scope="col"> T uWe | Th | Fr | |
Su | < /a> ISO Week | |
|---|---|---|---|---|---|---|---|
|
- |
- |
- |
< p class="TB">- |
1 |
2 |
3 |
<
/a>
Fifty-third ISO week of 1998 |
|
4 |
5 |
6 |
7 |
8 |
9 |
10 |
First ISO week of 1999< /p> |
|
11 |
12 |
13 |
14 |
15 |
16 |
1 7 |
Second ISO week of 1999 |
|
18 |
19 |
20 |
21 |
22 |
23 |
24 |
Third ISO week of 1999 |
|
25 |
26 |
27 |
28 |
29 |
30 |
31 |
Fourth ISO week of 1999 |
The first calendar week of the year is determined by the
NLS_TERRITORY parameter.
Oracle supports six calendar systems in addition to Gregorian, the default:
The calendar system is specified by
the NLS_CALENDAR parameter.
The Islamic c alendar starts from the year of the Hegira.
The Japanese Imperial calendar starts from the beginning of an Emperor's reign. For example, 1998 is the tenth year of the Heisei era. It should be noted, however, that the Gregori an system is also widely understood in Japan, so both 98 and Heisei 10 can be used to represent 1998.
Many different calendar systems are in use thro
ughout the world. NLS_CALENDAR specifies which calendar system Oracle uses.
| See Also: |
| Country font> | Numeric Formats |
|---|---|
|
Estonia |
1 234 567,89 |
|
Germany |
1.234.567,89 |
|
Japan |
1,234,567.89< /p> |
|
UK |
1,234,567.89 |
|
US |
1,234,567.89 p> |
Numeric formats are derived from the setting of the NLS_TERR
ITORY parameter, but they can be overridden by the NLS_NUMERIC_CHARACTERS parameter.
This parameter specifies the decimal character and group separator. The group separator is the ch
aracter that separates integer groups to show thousands and millions, for example. The group separator is the character returned by t
he G number format mask. The decimal character separates the integer and decimal parts of a number. Setting NLS_NUMERIC_CHARACT
ERS overrides the values derived from the setting of NLS_TERRITORY.
Any character can be the decimal character or group separator. The two characters specified must be single-byte, and the characters must be different from each other. The characters cannot be any numeric character or any of the following characters: plus (+), hyphen (- ), less than sign (<), greater than sign (>). Either character can be a space.
To set the decimal character to a comma and the grouping separator to a period, define NLS_NUMERIC_CHARACTERS as
follows:
ALTER SESSION SET NLS_NUMERIC_CHARACTERS = ",.";
SQL statements can include numbers represented as numeric or text literals. Numeric literals are n ot enclosed in quotes. They are part of the SQL language syntax and always use a dot as the decimal character and never contain a gro up separator. Text literals are enclosed in single quotes. They are implicitly or explicitly converted to numbers, if required, accor ding to the current NLS settings.
The following SELECT statement formats the n
umber 4000 with the decimal character and group separator specified in the ALTER SESSION statement:
SELECT TO_CHAR(4000, '9G999D99') FROM dual;
You should see output similar to the following:
TO_CHAR(4 --------- 4.000,00
You can change the default value
of NLS_NUMERIC_CHARACTERS by:
NLS_NUMERIC_CHARACTERS in the initialization parameter file and then restart the instanceALTER SESSION statement to change the parameter's value during a sess
ion
| See Also:
Oracle Databas
e SQL Reference for more information about the |
| Property | Descri ption |
|---|---|
|
Parameter type |
String |
|
|
Environment variable p> |
|
Default value |
Derived from |
|
|
Any valid character td> |
NLS_LIST_SEPARATOR specifies the character to use to sepa
rate values in a list of values (usually , or . or ; or :). Its default value is
derived from the value of NLS_TERRITORY. For example, a list of numbers from 1 to 5 can be expressed as 1,2,3,4,5 or 1.2
.3.4.5 or 1;2;3;4;5 or 1:2:3:4:5.
The character specified must be single-byte and cannot be the same as either the numeric or monetary decimal character, any numeric character, or any of the following characters: plus (+), h yphen (-), less than sign (<), greater than sign (>), period (.).
This section includes the following topics:
Different currency formats are used t hroughout the world. Some typical ones are shown in Table 3-10.
< h5 class="TT"> Table 3-10 Currency Format Examples| Country | Example |
|---|---|
|
Estonia< /p> |
1 234,56 kr |
|
Germany |
1.234,56€ |
|
Japan |
¥1,234.56 |
|
UK |
£1,234.56 |
|
US |
$1,234.56 |
| Property | Description |
|---|---|
|
Parameter type |
String |
|
Pa rameter scope |
Initialization parameter, environment vari
able, |
|
Default value |
<
/a>
Derived from |
|
Range of values |
Any valid currency symbol string |
N
LS_CURRENCY overrides the setting defined implicitly by NLS_TERRITORY.
Connect to the sample order entry schema:
SQL> connect oe/oe Connected.
Enter a SELECT statement si
milar to the following:
SQL> SELECT TO_CHAR(order_total, 'L099G999D99') "total" FROM ord ers WHERE order_id > 2450;
You should see output similar to the following:
total --------------------- $078,279.60 $006,653.40 $014,087.50 $010,474.60 $012,589.00 $000,129.00 $003,878.40 $021,586.20a>
You can change the default value of NLS_CURRENCY by:
ALTER SESSION statement
Oracle Database SQL Reference for more information
about the |
| |
Description |
|---|---|
|
Param eter type |
String |
|
Parameter scope td> |
Initialization parameter, environment variable, |
|
Default value |
Derived f
rom |
| <
/a>
Range of values |
Any valid string |
NLS_ISO_CURRENCY specifies the char
acter string returned by the C number format mask, the ISO currency symbol. Setting NLS_ISO_CURRENCY overri
des the value defined implicitly by NLS_TERRITORY.
Local currency symbols can be ambiguous. For example, a dollar sign ($) can refer to US dollars or Australian dollars. ISO specifications define unique currency symbols for specific territories or countries. For example, the ISO currency symbol for the US dollar is USD. The ISO currency symbo l for the Australian dollar is AUD.
More ISO currency symbols are shown in Table 3-11.
| Country | Example |
|---|---|
|
Estonia |
1 234 567,89 EEK |
|
Germany |
1.234.567,89 EUR |
|
Japan |
1,234,567.89 JPY |
|
a>
UK |
1,234,567.89 GBP |
|
US |
1,234,567.89 USD |
NLS_ISO_CURRENCY
code> has the same syntax as the NLS_TERRITORY parameter, and all supported territories are valid values.
This example assumes that you are connected as oe/oe in the sample schema.
To specify the ISO currency symbol for France, set NLS_ISO_CURRENCY as follows:
ALTER SESSION SET NLS_ISO_CURRENCY = FRANCE;
Enter a SELECT statement:
SQL> SELECT TO_CHAR(order_total, 'C 099G999D99') "TOTAL" FROM orders WHERE customer_id = 146;
You should see output similar to the following:
TOTAL ------------------ EUR017,848.20 EUR027,455.30 EUR029,249.10 EUR013,824.00 EUR000,086.00
You can change the default value of NLS_ISO_CURRENCY by:
ALTER SESSION statement
Oracle Database SQL Reference for more information about the
Parameter type strong>
String
Parameter scope
Initialization parameter, environmental variable, ALTER SESSION, and
SQL functions
Default value
Derived from NLS_TERRITORY
Range of values
Any valid symbol
Use NLS_DUAL_CURRENCY to override the defaul
t dual currency symbol defined implicitly by NLS_TERRITORY.
NLS_DUAL_CUR
RENCY was introduced to support the euro currency symbol during the euro transition period. Tab
le 3-12 lists the character sets that support the euro symbol.
| Character Set Name | Description | Hexadecimal Code Value of the Euro Symbol |
|---|---|---|
|
D8EBCDIC1141 |
EBCDIC Code Page 1141 8-bit Austrian German |
9F td> |
|
DK8EBCDIC1142 |
EBCDIC Code Page 1142 8-bit Danish |
5A |
|
S8EBCDIC1143 |
EBCDIC Code Page 1143 8-bit Swedish < /td> |
5A |
|
I8EBCDIC1144 |
EBCDI C Code Page 1144 8-bit Italian |
9F |
|
F8EBCDIC1147 |
EBCDIC Code Page 1147 8-bit French |
9F |
|
WE8PC858 |
IBM-PC Code Page 858 8-bit West European |
DF |
|
WE8ISO8859P15 |
ISO 8859-15 West European |
A4 |
|
EE8MSWIN1250 |
MS Wind ows Code Page 1250 8-bit East European |
80 |
|
CL8MSWIN1251 |
MS Windows Code Page 1251 8-bit Latin/Cyrillic |
a>
88 |
|
WE8MSWIN1252 |
MS Windows Code Page 1252 8-bit West European |
80 |
|
EL8MSWIN1253 |
MS W indows Code Page 1253 8-bit Latin/Greek |
80 |
|
WE8EBCDIC1047E |
Latin 1/Open Systems 1047 |
9F |
|
WE8EBCDIC1140 |
EBCDIC Code Page 1140 8-bit West European |
9F |
|
WE8EBCDIC1140C |
EBCDIC Code Page 1140 C lient 8-bit West European |
9F |
|
WE8EBCDIC1145 |
EBCDIC Code Page 1145 8-bit West European |
9F |
|
WE8EBCDIC114 6 |
EBCDIC Code Page 1146 8-bit West European |
9F |
|
WE8EBCDIC1148 |
EBCDIC Code Page 1148 8 -bit West European |
9F |
|
WE8EBCDIC1148C |
EBCDIC Code Page 1148 Client 8-bit West European |
9F |
|
EL8ISO8859P 7 |
ISO 8859-7 Latin/Greek |
A4 |
|
IW8MSWIN1255 |
MS Windows Code Page 1255 8-bit Latin/Hebre w |
80 |
|
MS Windows Code Page 1256 8-Bit Latin/Arabic |
80 | |
|
TR8MSWIN1254 |
MS Windows Code Page 1254 8-bit Turkish |
a>
80 |
|
BLT8MSWIN1257 |
MS Windows Code Page 1257 Baltic |
80 |
|
VN8MSWIN1258 |
MS Windows Code Page 1258 8-bit Vietnamese |
80 |
|
TH8TISASCII |
Thai Industrial 620-2533 - ASCII 8-bit |
80< /p> |
|
AL32UTF8 |
Unicode 3.2 UTF-8 Universal character set |
E282AC |
|
UTF8 |
CESU-8 |
E282AC |
|
AL16UTF16 |
Unicode 3.2 UTF-16 Universal c haracter set |
20AC |
|
UTFE |
UTF-EBCDIC encoding of Unicode 3.0 |
CA4653 |
|
ZHT16HKSCS |
MS Windows Code Page 950 with Hong Kong Supplementary Character Set |
A3E1 |
|
ZHS32GB18030 |
GB18030-2000 |
A2E3 |
|
WE8BS2000E |
Siemens EB CDIC.DF.04 8-bit West European |
9F |
Twelve members of the European Monetary Union (EMU) have
adopted the euro as their currency. Setting NLS_TERRITORY to correspond to a country in the EMU (Austria, Belgium, Finl
and, France, Germany, Greece, Ireland, Italy, Luxembourg, the Netherlands, Portugal, and Spain) results in the default values for NLS_DUAL_CURRENCY being set to EUR.
Du ring the transition period (1999 through 2001), Oracle support for the euro was provided in Oracle8i and late r as follows:
NLS_CURRENCY was defined as the pri
mary currency of the countryNLS_ISO_CURRENCY was defined as the
ISO currency code of a given territoryNLS_DUAL_CURRENCY was defi
ned as the secondary currency symbol (usually the euro) for a given territoryBeginni
ng with Oracle9i release 2 (9.2), the value of NLS_ISO_CURRENCY results in the ISO currency symb
ol being set to EUR for EMU member countries who use the euro. For example, suppose NLS_ISO_CURRENCY is set
to FRANCE. Enter the following SELECT statement:
SELECT TO_CHAR( TOTAL, 'C099G999D99') "TOTAL" FROM orders WHERE customer_id=585;
You should see output similar to the following:
TOTAL ------- EUR12.673,49
Customers who must retain their obsol
ete local currency symbol can override the default for NLS_DUAL_CURRENCY or NLS_CURRENCY by defining them a
s parameters in the initialization file on the server and as environment variables on the client.
It is not possible to override the ISO currency symbol that results from the va
lue of NLS_ISO_CURRENCY.
| Property | Description |
|---|---|
|
Parameter type |
String |
|
Parameter scope |
Environment variable |
|
Default value |
Derived from |
|
Range of values |
Any valid character |
NLS_MONETARY_CH
ARACTERS specifies the character that separates groups of numbers in monetary expressions. For example, when the territory is
America, the thousands separator is a comma, and the decimal separator is a period.
| Property | Description |
|---|---|
|
Paramete r type |
String |
|
Parameter scope |
Environment variable |
|
Default value |
Derived from |
|
Range of values |
| Property | Description |
|---|---|
|
Parameter type |
String |
|
Parameter scope |
Environment variable |
|
Default value |
Derived from |
|
Range of values< /p> |
Any string, maximum or 9 bytes (not including null) |
NLS_DEBIT sets the symbol that displays a debit in financial repo
rts. The default value of this parameter is determined by NLS_TERRITORY. For example, a minus sign (-) is a valid value
of NLS_DEBIT.
This parameter can be specified only in the client environment.< /p>
It can be retrieved through the OCIGetNlsInfo() function.
You can choose how to sort data by using linguistic sort parameters. p>
This section includes the following topics:
NLS_SORT specifies the type of
sort for character data. It overrides the default value that is derived from NLS_LANGUAGE.
The syntax of NLS_SORT is:
NLS_SORT = BINARY | sort_name
BINARY specifies a binary sort. sort_nam
e specifies a linguistic sort sequence.
The value of NLS_SORT affe
cts the following SQL operations: WHERE, START WITH, IN/OUT, BETWEEN, CASE
WHEN, HAVING, ORDER BY. All other SQL operators make comparisons in binary mode only.
To specify the German linguistic sort sequence, set NLS_SORT as follows:
NLS_SORT = German
You can alter the default value of NLS_SORT
by doing one of the following:
ALTER
SESSION statement
| See Also: |
The
value of NLS_COMP affects the following SQL operations: WHERE, START WITH, IN/OUT
, BETWEEN, CASE WHEN, HAVING, ORDER BY. All other SQL operators make comparisons
in binary mode only.
You can use NLS_COMP to avoid the cumbersome process of u
sing the NLSSORT function in SQL statements when you want to perform a linguistic comparison instead of a binary compari
son. When NLS_COMP is set to ANSI, SQL operations perform a linguistic comparison based on the value of
Set NLS_COMP to ANSI as follows:
ALTER SESSION SET NLS_COMP = ANSI;
When NLS_COMP is set to ANSI, a linguistic index improves the performance of the linguistic comparison.
To enable a linguistic index, use the following syntax:
CREATE INDEX i ON t(NLSSORT(col, 'NLS_SORT=FRENCH'));
This section includes the following topic:
| Property | Description |
|---|---|
|
Parameter type |
String |
|
Parameter scope |
Initialization parameter, |
|
Default value |
|
|
Range of values |
<
a name="1009537">
|
NLS_NCHAR_CONV_EXCP determines whether an error is reported when there is data loss during an implicit or ex
plicit character type conversion between NCHAR/NVARCHAR data and CHAR/VARCHAR2 da
ta. The default value results in no error being reported.
| See Also:
Chapter 11, "Character Set Migration" for more information about data loss during character set conversion |
This section includes the following topic:
| Property | Description |
|---|---|
|
Parameter type |
String | <
/tr>
|
Parameter scope |
Environment variable, initialization par
ameter, |
|
Default value |
|
|
Range of values |
|
By def
ault, the character datatypes CHAR and VARCHAR2 are specified in bytes, not characters. Hence, the specific
ation CHAR(20) in a table definition allows 20 bytes for storing character data.
This works well if the database character set uses a single-byte character encoding scheme because the number of characters is the same as the number of bytes. If the database character set uses a multibyte character encoding scheme, then the number of bytes no l onger equals the number of characters because a character can consist of one or more bytes. Thus, column widths must be chosen with c are to allow for the maximum possible number of bytes for a given number of characters. You can overcome this problem by switching to character semantics when defining the column size.
NLS_LENGTH_SEMANTICS enabl
es you to create CHAR, VARCHAR2, and LONG columns using either byte or character length semant
ics. NCHAR, NVARCHAR2, CLOB, and NCLOB columns are always character-based. Existi
ng columns are not affected.
You may be required to use byte semantics in order to maintain compatibility with existing applications.
NLS_LENGTH_SEMANTICS does not apply
to tables in SYS and SYSTEM. The data dictionary always uses byte semantics.
NLS_LENGTH_SEMANTICS environment variable is not set on the client, then the client sessio
n defaults to the value for NLS_LENGTH_SEMANTICS on the database server. This enables all client sessions on the network
to have the same NLS_LENGTH_SEMANTICS behavior. Setting the environment variable on an individual client enables the se
rver initialization parameter to be overridden for that client.
See Also:
|