|PL/SQL User's Guide and Reference
10g Release 1 (10.1)
Part Number B10807-01
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:
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_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.
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
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.
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
New IEEE Floating-Point Types
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
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
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.
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.
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
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.
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.
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_SUBSTR functions anywhere you would use
Flashback Query Functions
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.
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.
You can create collections that are indexed by
VARCHAR2 values, providing features similar to hash tables in Perl and other languages.
You can now override the system default constructor for an object type with your own function.
Enhancements to UTL_FILE package
UTL_FILE contains several new functions that let you perform general file-management operations from PL/SQL.
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.
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.
Integration of SQL and PL/SQL parsers
PL/SQL now supports the complete range of syntax for SQL statements, such as
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.
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.
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.
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.
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.
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.
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.
You can nest the collection types, for example to create a
VARRAY of PL/SQL tables, a
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"
Better Integration for LOB Datatypes
You can operate on LOB types much like other similar types. You can use character functions on
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"
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.
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.