The UTL_IDENT package indicates which database or client PL/SQL is running in, such as TimesTen versus Oracle Database, and server versus client. Each database or client running PL/SQL has its own copy of this package.
This chapter contains the following topics:
Overview
Security model
Constants
Examples
This section contains topics that relate to using the UTL_IDENT package.
The UTL_IDENT package indicates whether PL/SQL is running on TimesTen, an Oracle database client, an Oracle database server, or Oracle Forms. Each of these has its own version of UTL_IDENT with appropriate settings for the constants.
The primary use case for the UTL_IDENT package is for conditional compilation, resembling the following, of PL/SQL packages that are supported by Oracle Database, TimesTen, or clients such as Oracle Forms.
$if utl_ident.is_oracle_server $then
[...Run code supported for Oracle Database...]
$elsif utl_ident.is_timesten $then
[...code supported for TimesTen Database...]
$end
Also see "Examples".
The UTL_IDENT package runs as the package owner SYS. The public synonym UTL_IDENT and EXECUTE permission on this package are granted to PUBLIC.
The UTL_IDENT package uses the constants in Table 12-1, shown here with the settings in a TimesTen installation.
Table 12-1 UTL_IDENT constants
| Constant | Type | Value | Description |
|---|---|---|---|
|
|
|
|
PL/SQL is running in Oracle Database. |
|
|
|
|
PL/SQL is running in Oracle Client. |
|
|
|
|
PL/SQL is running in Oracle Forms. |
|
|
|
|
PL/SQL is running in TimesTen. |
This example shows output from a script that creates and executes a function IS_CLOB_SUPPORTED that uses the UTL_IDENT and TT_DB_VERSION packages to provide information about the database being used. The function uses UTL_IDENT to determine whether the database is TimesTen, then uses TT_DB_VERSION to determine the TimesTen version. VER_LE_1121 is TRUE for TimesTen 11.2.1 releases and FALSE for TimesTen 11g Release 2 (11.2.2) releases. In the example, because VER_LE_1121 is determined to be FALSE, then it can be assumed that this is a TimesTen 11g Release 2 (11.2.2) release and therefore LOBs are supported. The example then creates a table with a CLOB column and shows DESCRIBE output of the table.
create or replace function is_clob_supported return boolean
as
begin
$if utl_ident.is_oracle_server
$then
return true;
$elsif utl_ident.is_timesten
$then
$if tt_db_version.ver_le_1121
$then
return false; -- CLOB datatype was introduced in 11g Release 2 (11.2.2)
$else
return true;
$end
$end
end;
Function created.
show errors;
No errors.
begin
if is_clob_supported
then
execute immediate 'create table mytab (mydata clob)';
else
execute immediate 'create table mytab (mydata varchar2(4000000))';
end if;
end;
PL/SQL procedure successfully completed.
describe mytab;
Table MYSCHEMA.MYTAB:
Columns:
MYDATA CLOB
1 table found.
(primary key columns are indicated with *)
(Output is shown after running the commands from a SQL script.)