Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
5.97 Mб

What's New in PL/SQL?

This section describes new features of PL/SQL release 10g, and provides pointers to additional information.

The following sections describe the new features in PL/SQL:

New Features in PL/SQL for Oracle Database 10g

New Features in PL/SQL for Oracle9i

New Features in PL/SQL for Oracle Database 10g

Release 1 (10.1)

Improved Performance

PL/SQL performance is improved across the board. Most improvements are automatic, with no action required from you.

Global optimization of PL/SQL code is controlled by the PLSQL_OPTIMIZE_LEVEL initialization parameter. The default optimization level improves performance for a broad range of PL/SQL operations. Most users should never need to change the default optimization level.

Performance improvements include better integer performance, reuse of expression values, simplification of branching code, better performance for some library calls, and elimination of dead code.

The new datatypes BINARY_FLOAT and BINARY_DOUBLE can improve performance in number-crunching applications, such as processing scientific data.

Native compilation is easier and more integrated, with fewer initialization parameters to set, less compiler configuration, the object code stored in the database, and compatibility with Oracle Real Application Clusters environments.

The FORALL statement can handle associate arrays and nested tables with deleted elements. You can now use this performance construct in more situations than before, and avoid the need to copy elements from one collection to another.

Enhancements to PL/SQL Native Compilation

This feature now requires less setup and maintenance.

A package body and its spec do not need to be compiled with the same setting for native compilation. For example, a package body can be compiled natively while the package spec is compiled interpreted, or vice versa.


Natively compiled subprograms are stored in the database, and the corresponding shared libraries are extracted automatically as needed. You do not need to worry about backing up the shared libraries, cleaning up old shared libraries, or what happens if a shared library is deleted accidentally.

The initialization parameters and command setup for native compilation have been simplified. The only required parameter is PLSQL_NATIVE_LIBRARY_DIR. The parameters related to the compiler, linker, and make utility have been obsoleted. The file that controls compilation is now a command file showing the commands and options for compiling and linking, rather than a makefile. Any errors that occur during native compilation are reflected in the USER_ERRORS dictionary view and by the SQL*Plus command SHOW ERRORS.

Native compilation is turned on and off by a separate initialization parameter, PLSQL_CODE_TYPE, rather than being one of several options in the PLSQL_COMPILER_FLAGS parameter, which is now deprecated.

See Also:

"Compiling PL/SQL Code for Native Execution" on page 11-22

FORALL Support for Non-Consecutive Indexes

You can use the INDICES OF and VALUES OF clauses with the FORALL statement to iterate over non-consecutive index values. For example, you can delete elements from a nested table, and still use that nested table in a FORALL statement.

See Also:

"Using the FORALL Statement" on page 11-8

New IEEE Floating-Point Types

New datatypes BINARY_FLOAT and BINARY_DOUBLE represent floating-point numbers in IEEE 754 format. These types are useful for scientific computation where you exchange data with other programs and languages that use the IEEE 754 standard for floating-point. Because many computer systems support IEEE 754 floating-point operations through native processor instructions, these types are efficient for intensive computations involving floating-point data.

Support for these types includes numeric literals such as 1.0f and 3.141d, arithmetic operations including square root and remainder, exception handling, and special values such as not-a-number (NaN) and infinity.

The rules for overloading subprograms are enhanced, so that you can write math libraries with different versions of the same function operating on PLS_INTEGER,


See Also:

"PL/SQL Number Types" on page 3-2

Improved Overloading

You can now overload subprograms that accept different kinds of numeric arguments, to write math libraries with specialized versions of each subprogram for different datatypes.

See Also:

"Guidelines for Overloading with Numeric Types" on page 8-11


Nested Table Enhancements

Nested tables defined in PL/SQL have many more operations than previously. You can compare nested tables for equality, test whether an element is a member of a nested table, test whether one nested table is a subset of another, perform set operations such as union and intersection, and much more.

See Also:

"Assigning Collections" on page 5-13

"Comparing Collections" on page 5-16

Compile-Time Warnings

Oracle can issue warnings when you compile subprograms that produce ambiguous results or use inefficient constructs. You can selectively enable and disable these warnings through the PLSQL_WARNINGS initialization parameter and the


See Also:

"Overview of PL/SQL Compile-Time Warnings" on page 10-17

Quoting Mechanism for String Literals

Instead of doubling each single quote inside a string literal, you can specify your own delimiter character for the literal, and then use single quotes inside the string.

See Also:

"String Literals" on page 2-6

Implicit Conversion Between CLOB and NCLOB

You can implicitly convert from CLOB to NCLOB or from NCLOB to CLOB. Because this can be an expensive operation, it might help maintainability to continue using the TO_CLOB and TO_NCLOB functions.

Regular Expressions

If you are familiar with UNIX-style regular expressions, you can use them while performing queries and string manipulations. You use the REGEXP_LIKE operator in SQL queries, and the REGEXP_INSTR, REGEXP_REPLACE, and REGEXP_SUBSTR functions anywhere you would use INSTR, REPLACE, and SUBSTR.

See Also:

"Summary of PL/SQL Built-In Functions" on page 2-28

"How Can I Use Regular Expressions with PL/SQL?" on page G-1

Flashback Query Functions

The functions SCN_TO_TIMESTAMP and TIMESTAMP_TO_SCN let you translate between a date and time, and the system change number that represents the database state at a point in time.


See Also:

"SCN_TO_TIMESTAMP Function" on page 13-122

"TIMESTAMP_TO_SCN Function" on page 13-138

New Features in PL/SQL for Oracle9i

Release 2 (9.2)

Insert/update/select of entire PL/SQL records

You can now insert into or update a SQL table by specifying a PL/SQL record variable, rather than specifying each record attribute separately. You can also select entire rows into a PL/SQL table of records, rather than using a separate PL/SQL table for each SQL column.

See Also:

"Inserting PL/SQL Records into the Database" on page 5-36

"Updating the Database with PL/SQL Record Values" on page 5-36

"Querying Data into Collections of Records" on page 5-38

Associative arrays

You can create collections that are indexed by VARCHAR2 values, providing features similar to hash tables in Perl and other languages.

See Also:

"Understanding Associative Arrays (Index-By Tables)" on page 5-3

User-defined constructors

You can now override the system default constructor for an object type with your own function.

See Also:

"Defining Object Constructors" on page 12-13

Enhancements to UTL_FILE package

UTL_FILE contains several new functions that let you perform general file-management operations from PL/SQL.

See Also:

PL/SQL Packages and Types Reference

TREAT function for object types

You can dynamically choose the level of type inheritance to use when calling object methods. That is, you can reference an object type that inherits from several levels of parent types, and call a method from a specific parent type. This function is similar to the SQL function of the same name.


See Also:

Oracle Database SQL Reference

Better linking in online documentation

Many of the cross-references from this book to other books have been made more specific, so that they link to a particular place within another book rather than to the table of contents. Because this is an ongoing project, not all links are improved in this edition. If you are reading a printed copy of this book, you can find the online equivalent at http://otn.oracle.com/documentation/, with full search capability.

Release 1 (9.0.1)

Integration of SQL and PL/SQL parsers

PL/SQL now supports the complete range of syntax for SQL statements, such as INSERT, UPDATE, DELETE, and so on. If you received errors for valid SQL syntax in PL/SQL programs before, those statements should now work.

See Also: Because of more consistent error-checking, you might find that some invalid code is now found at compile time instead of producing an error at runtime, or vice versa. You might need to change the source code as part of the migration procedure. See Oracle Database Upgrade Guide for details on the complete migration procedure.

CASE statements and expressions

CASE statements and expressions are a shorthand way of representing IF/THEN choices with multiple alternatives.

See Also:

"CASE Expressions" on page 2-24

"Using the CASE Statement" on page 4-3

"CASE Statement" on page 13-14

Inheritance and Dynamic Method Dispatch

Types can be declared in a supertype/subtype hierarchy, with subtypes inheriting attributes and methods from their supertypes. The subtypes can also add new attributes and methods, and override existing methods. A call to an object method executes the appropriate version of the method, based on the type of the object.

See Also:

"Overview of PL/SQL Type Inheritance" on page 12-10

"How Overloading Works with Inheritance" on page 8-13

Type Evolution

Attributes and methods can be added to and dropped from object types, without the need to re-create the types and corresponding data. This feature lets the type hierarchy adapt to changes in the application, rather than being planned out entirely in advance.


See Also: "Changing Attributes and Methods of an Existing

Object Type (Type Evolution)" on page 12-9

New Date/Time Types

The new datatype TIMESTAMP records time values including fractional seconds. New datatypes TIMESTAMP WITH TIME ZONE and TIMESTAMP WITH LOCAL TIME ZONE allow you to adjust date and time values to account for time zone differences. You can specify whether the time zone observes daylight savings time, to account for anomalies when clocks shift forward or backward. New datatypes

INTERVAL DAY TO SECOND and INTERVAL YEAR TO MONTH represent differences between two date and time values, simplifying date arithmetic.

See Also:

"PL/SQL Date, Time, and Interval Types" on page 3-12

"Datetime and Interval Arithmetic" on page 3-15

"Datetime Literals" on page 2-6

Native Compilation of PL/SQL Code

Improve performance by compiling Oracle-supplied and user-written stored procedures into native executables, using typical C development tools. This setting is saved so that the procedure is compiled the same way if it is later invalidated.

See Also: "Compiling PL/SQL Code for Native Execution" on page 11-22

Improved Globalization and National Language Support

Data can be stored in Unicode format using fixed-width or variable-width character sets. String handling and storage declarations can be specified using byte lengths, or character lengths where the number of bytes is computed for you. You can set up the entire database to use the same length semantics for strings, or specify the settings for individual procedures; this setting is remembered if a procedure is invalidated.

See Also:

"PL/SQL Character and String Types" on page 3-4

"PL/SQL National Character Types" on page 3-8

Table Functions and Cursor Expressions

You can query a set of returned rows like a table. Result sets can be passed from one function to another, letting you set up a sequence of transformations with no table to hold intermediate results. Rows of the result set can be returned a few at a time, reducing the memory overhead for producing large result sets within a function.

See Also:

"Setting Up Transformation Pipelines with Table Functions" on page 11-28

"Using Cursor Expressions" on page 6-27


Multilevel Collections

You can nest the collection types, for example to create a VARRAY of PL/SQL tables, a VARRAY of VARRAYs, or a PL/SQL table of PL/SQL tables. You can model complex data structures such as multidimensional arrays in a natural way.

See Also: "Using Multilevel Collections" on page 5-21

Better Integration for LOB Datatypes

You can operate on LOB types much like other similar types. You can use character functions on CLOB and NCLOB types. You can treat BLOB types as RAWs. Conversions between LOBs and other types are much simpler, particularly when converting from LONG to LOB types.

See Also: "PL/SQL LOB Types" on page 3-10

Enhancements to Bulk Operations

You can now perform bulk SQL operations, such as bulk fetches, using native dynamic SQL (the EXECUTE IMMEDIATE statement). You can perform bulk insert or update operations that continue despite errors on some rows, then examine the problems after the operation is complete.

See Also:

"Reducing Loop Overhead for DML Statements and Queries (FORALL, BULK COLLECT)" on page 11-7

"Using Bulk Dynamic SQL" on page 7-6

"EXECUTE IMMEDIATE Statement" on page 13-47

MERGE Statement

This specialized statement combines insert and update into a single operation. It is intended for data warehousing applications that perform particular patterns of inserts and updates.

See Also:

"MERGE Statement" on page 13-84 for a brief discussion and example

Oracle Database SQL Reference for detailed information



Соседние файлы в папке Oracle 10g