Sumário Itens Encontrados: 761Part I. Programming in PL/SQL1. Introduction to PL/SQL 3What Is PL/SQL? 3The Origins of PL/SQL 4The Early Years of PL/SQL 4Improved Application Portability 5Improved Execution Authority and Transaction Integrity 5Humble Beginnings, Steady Improvement 6So This Is PL/SQL 7Integration with SQL 7Control and Conditional Logic 8When Things Go Wrong 9About PL/SQL Versions 11Oracle Database 12c New PL/SQL Features 12Resources for PL/SQL Developers 14The OâReilly PL/SQL Series 15PL/SQL on the Internet 16Some Words of Advice 17Donât Be in Such a Hurry! 17Donât Be Afraid to Ask for Help 18Take a Creative, Even Radical Approach 192. Creating and Running PL/SQL Code 21Navigating the Database 21Creating and Editing Source Code 22SQL*Plus 23vStarting Up SQL*Plus 24Running a SQL Statement 26Running a PL/SQL Program 27Running a Script 29What Is the âCurrent Directoryâ? 30Other SQL*Plus Tasks 31Error Handling in SQL*Plus 36Why You Will Love and Hate SQL*Plus 36Performing Essential PL/SQL Tasks 37Creating a Stored Program 37Executing a Stored Program 41Showing Stored Programs 41Managing Grants and Synonyms for Stored Programs 42Dropping a Stored Program 43Hiding the Source Code of a Stored Program 44Editing Environments for PL/SQL 44Calling PL/SQL from Other Languages 45C: Using Oracleâs Precompiler (Pro*C) 46Java: Using JDBC 47Perl: Using Perl DBI and DBD::Oracle 48PHP: Using Oracle Extensions 49PL/SQL Server Pages 51And Where Else? 513. Language Fundamentals 53PL/SQL Block Structure 53Anonymous Blocks 55Named Blocks 57Nested Blocks 57Scope 58Qualify All References to Variables and Columns in SQL Statements 59Visibility 62The PL/SQL Character Set 65Identifiers 67Reserved Words 68Whitespace and Keywords 70Literals 70NULLs 71Embedding Single Quotes Inside a Literal String 72Numeric Literals 73Boolean Literals 74The Semicolon Delimiter 74Comments 75Single-Line Comment Syntax 75Multiline Comment Syntax 76The PRAGMA Keyword 76Labels 77Part II. PL/SQL Program Structure4. Conditional and Sequential Control 83IF Statements 83The IF-THEN Combination 84The IF-THEN-ELSE Combination 86The IF-THEN-ELSIF Combination 87Avoiding IF Syntax Gotchas 89Nested IF Statements 90Short-Circuit Evaluation 91CASE Statements and Expressions 93Simple CASE Statements 93Searched CASE Statements 95Nested CASE Statements 98CASE Expressions 98The GOTO Statement 100The NULL Statement 101Improving Program Readability 101Using NULL After a Label 1025. Iterative Processing with Loops 105Loop Basics 105Examples of Different Loops 106Structure of PL/SQL Loops 107The Simple Loop 108Terminating a Simple Loop: EXIT and EXIT WHEN 109Emulating a REPEAT UNTIL Loop 110The Intentionally Infinite Loop 111The WHILE Loop 112The Numeric FOR Loop 114Rules for Numeric FOR Loops 114Examples of Numeric FOR Loops 115Handling Nontrivial Increments 116The Cursor FOR Loop 117Example of Cursor FOR Loops 118Loop Labels 119The CONTINUE Statement 120Tips for Iterative Processing 123Use Understandable Names for Loop Indexes 123The Proper Way to Say Goodbye 124Obtaining Information About FOR Loop Execution 126SQL Statement as Loop 1266. Exception Handlers 129Exception-Handling Concepts and Terminology 129Defining Exceptions 132Declaring Named Exceptions 132Associating Exception Names with Error Codes 133About Named System Exceptions 136Scope of an Exception 139Raising Exceptions 140The RAISE Statement 140Using RAISE_APPLICATION_ERROR 141Handling Exceptions 143Built-in Error Functions 144Combining Multiple Exceptions in a Single Handler 149Unhandled Exceptions 149Propagation of Unhandled Exceptions 150Continuing Past Exceptions 153Writing WHEN OTHERS Handling Code 155Building an Effective Error Management Architecture 157Decide on Your Error Management Strategy 158Standardize Handling of Different Types of Exceptions 159Organize Use of Application-Specific Error Codes 162Use Standardized Error Management Programs 163Work with Your Own Exception âObjectsâ 165Create Standard Templates for Common Error Handling 167Making the Most of PL/SQL Error Management 169Part III. PL/SQL Program Data7. Working with Program Data 173Naming Your Program Data 173Overview of PL/SQL Datatypes 175Character Data 176Numbers 177Dates, Timestamps, and Intervals 178Booleans 178Binary Data 179ROWIDs 179REF CURSORs 179Internet Datatypes 180âAnyâ Datatypes 180User-Defined Datatypes 181Declaring Program Data 181Declaring a Variable 181Declaring Constants 182The NOT NULL Clause 183Anchored Declarations 183Anchoring to Cursors and Tables 185Benefits of Anchored Declarations 186Anchoring to NOT NULL Datatypes 188Programmer-Defined Subtypes 188Conversion Between Datatypes 189Implicit Data Conversion 189Explicit Datatype Conversion 1928. Strings 199String Datatypes 199The VARCHAR2 Datatype 200The CHAR Datatype 201String Subtypes 202Working with Strings 203Specifying String Constants 203Using Nonprintable Characters 205Concatenating Strings 206Dealing with Case 207Traditional Searching, Extracting, and Replacing 210Padding 213Trimming 215Regular Expression Searching, Extracting, and Replacing 216Working with Empty Strings 227Mixing CHAR and VARCHAR2 Values 229String Function Quick Reference 2319. Numbers 241Numeric Datatypes 241The NUMBER Type 242The PLS_INTEGER Type 247The BINARY_INTEGER Type 248The SIMPLE_INTEGER Type 249The BINARY_FLOAT and BINARY_DOUBLE Types 251The SIMPLE_FLOAT and SIMPLE_DOUBLE Types 256Numeric Subtypes 256Number Conversions 257The TO_NUMBER Function 258The TO_CHAR Function 261The CAST Function 267Implicit Conversions 268Numeric Operators 270Numeric Functions 271Rounding and Truncation Functions 271Trigonometric Functions 272Numeric Function Quick Reference 27210. Dates and Timestamps 277Datetime Datatypes 278Declaring Datetime Variables 280Choosing a Datetime Datatype 281Getting the Current Date and Time 282Interval Datatypes 284Declaring INTERVAL Variables 286When to Use INTERVALs 287Datetime Conversions 289From Strings to Datetimes 289From Datetimes to Strings 292Working with Time Zones 295Requiring a Format Mask to Match Exactly 298Easing Up on Exact Matches 299Interpreting Two-Digit Years in a Sliding Window 299Converting Time Zones to Character Strings 301Padding Output with Fill Mode 302Date and Timestamp Literals 302Interval Conversions 304Converting from Numbers to Intervals 304Converting Strings to Intervals 305Formatting Intervals for Display 306Interval Literals 307CAST and EXTRACT 308The CAST Function 308The EXTRACT Function 310Datetime Arithmetic 311Date Arithmetic with Intervals and Datetimes 311Date Arithmetic with DATE Datatypes 312Computing the Interval Between Two Datetimes 313Mixing DATEs and TIMESTAMPs 316Adding and Subtracting Intervals 317Multiplying and Dividing Intervals 317Using Unconstrained INTERVAL Types 318Date/Time Function Quick Reference 31911. Records 323Records in PL/SQL 323Benefits of Using Records 324Declaring Records 326Programmer-Defined Records 327Working with Records 330Comparing Records 337Trigger Pseudorecords 33812. Collections 341Collections Overview 342Collections Concepts and Terminology 343Types of Collections 345Collection Examples 345Where You Can Use Collections 349Choosing a Collection Type 354Collection Methods (Built-ins) 356The COUNT Method 357The DELETE Method 358The EXISTS Method 359The EXTEND Method 360The FIRST and LAST Methods 361The LIMIT Method 362The PRIOR and NEXT Methods 362The TRIM Method 363Working with Collections 365Declaring Collection Types 365Declaring and Initializing Collection Variables 369Populating Collections with Data 374Accessing Data Inside a Collection 379Using String-Indexed Collections 380Collections of Complex Datatypes 385Multilevel Collections 389Working with Collections in SQL 398Nested Table Multiset Operations 406Testing Equality and Membership of Nested Tables 408Checking for Membership of an Element in a Nested Table 409Performing High-Level Set Operations 409Handling Duplicates in a Nested Table 411Maintaining Schema-Level Collections 412Necessary Privileges 412Collections and the Data Dictionary 41313. Miscellaneous Datatypes 415The BOOLEAN Datatype 415The RAW Datatype 417The UROWID and ROWID Datatypes 417Getting ROWIDs 418Using ROWIDs 419The LOB Datatypes 420Working with LOBs 422Understanding LOB Locators 423Empty Versus NULL LOBs 425Writing into a LOB 427Reading from a LOB 430BFILEs Are Different 431SecureFiles Versus BasicFiles 436Temporary LOBs 439Native LOB Operations 442LOB Conversion Functions 447Predefined Object Types 447The XMLType Type 448The URI Types 451The Any Types 453Part IV. SQL in PL/SQL14. DML and Transaction Management 461DML in PL/SQL 462A Quick Introduction to DML 462Cursor Attributes for DML Operations 466RETURNING Information from DML Statements 467DML and Exception Handling 468DML and Records 470Transaction Management 473The COMMIT Statement 474The ROLLBACK Statement 474The SAVEPOINT Statement 475The SET TRANSACTION Statement 476The LOCK TABLE Statement 476Autonomous Transactions 477Defining Autonomous Transactions 478Rules and Restrictions on Autonomous Transactions 479Transaction Visibility 480When to Use Autonomous Transactions 481Building an Autonomous Logging Mechanism 48215. Data Retrieval 485Cursor Basics 486Some Data Retrieval Terms 487Typical Query Operations 488Introduction to Cursor Attributes 489Referencing PL/SQL Variables in a Cursor 492Choosing Between Explicit and Implicit Cursors 493Working with Implicit Cursors 494Implicit Cursor Examples 495Error Handling with Implicit Cursors 496Implicit SQL Cursor Attributes 498Working with Explicit Cursors 500Declaring Explicit Cursors 501Opening Explicit Cursors 504Fetching from Explicit Cursors 505Column Aliases in Explicit Cursors 507Closing Explicit Cursors 508Explicit Cursor Attributes 510Cursor Parameters 512SELECT...FOR UPDATE 515Releasing Locks with COMMIT 516The WHERE CURRENT OF Clause 518Cursor Variables and REF CURSORs 519Why Use Cursor Variables? 520Similarities to Static Cursors 521Declaring REF CURSOR Types 521Declaring Cursor Variables 522Opening Cursor Variables 523Fetching from Cursor Variables 524Rules for Cursor Variables 527Passing Cursor Variables as Arguments 530Cursor Variable Restrictions 532Cursor Expressions 533Using Cursor Expressions 534Restrictions on Cursor Expressions 53616. Dynamic SQL and Dynamic PL/SQL 537NDS Statements 538The EXECUTE IMMEDIATE Statement 538The OPEN FOR Statement 543About the Four Dynamic SQL Methods 548Binding Variables 550Argument Modes 551Duplicate Placeholders 553Passing NULL Values 554Working with Objects and Collections 555Dynamic PL/SQL 557Build Dynamic PL/SQL Blocks 558Replace Repetitive Code with Dynamic Blocks 560Recommendations for NDS 561Use Invoker Rights for Shared Programs 561Anticipate and Handle Dynamic Errors 562Use Binding Rather than Concatenation 564Minimize the Dangers of Code Injection 566When to Use DBMS_SQL 569Obtain Information About Query Columns 569Meeting Method 4 Dynamic SQL Requirements 571Minimizing Parsing of Dynamic Cursors 578Oracle Database 11g New Dynamic SQL Features 579Enhanced Security for DBMS_SQL 584Part V. PL/SQL Application Construction17. Procedures, Functions, and Parameters 591Modular Code 592Procedures 593Calling a Procedure 596The Procedure Header 596The Procedure Body 596The END Label 597The RETURN Statement 597Functions 597Structure of a Function 598The RETURN Datatype 601The END Label 602Calling a Function 603Functions Without Parameters 604The Function Header 604The Function Body 605The RETURN Statement 605Parameters 607Defining Parameters 608Actual and Formal Parameters 608Parameter Modes 609Explicit Association of Actual and Formal Parameters in PL/SQL 613The NOCOPY Parameter Mode Qualifier 617Default Values 618Local or Nested Modules 619Benefits of Local Modularization 620Scope of Local Modules 623Sprucing Up Your Code with Nested Subprograms 623Subprogram Overloading 624Benefits of Overloading 625Restrictions on Overloading 628Overloading with Numeric Types 629Forward Declarations 630Advanced Topics 631Calling Your Function from Inside SQL 631Table Functions 637Deterministic Functions 647Implicit Cursor Results (Oracle Database 12c) 649Go Forth and Modularize! 65018. Packages 651Why Packages? 651Demonstrating the Power of the Package 652Some Package-Related Concepts 655Diagramming Privacy 657Rules for Building Packages 658The Package Specification 658The Package Body 660Initializing Packages 662Rules for Calling Packaged Elements 666Working with Package Data 667Global Within a Single Oracle Session 668Global Public Data 669Packaged Cursors 669Serializable Packages 674When to Use Packages 677Encapsulate Data Access 677Avoid Hardcoding Literals 680Improve Usability of Built-in Features 683Group Together Logically Related Functionality 683Cache Static Session Data 684Packages and Object Types 68519. Triggers 687DML Triggers 688DML Trigger Concepts 689Creating a DML Trigger 691DML Trigger Example: No Cheating Allowed! 696Multiple Triggers of the Same Type 702Who Follows Whom 703Mutating Table Errors 705Compound Triggers: Putting It All in One Place 706DDL Triggers 710Creating a DDL Trigger 710Available Events 713Available Attributes 713Working with Events and Attributes 715Dropping the Undroppable 718The INSTEAD OF CREATE Trigger 719Database Event Triggers 720Creating a Database Event Trigger 721The STARTUP Trigger 722The SHUTDOWN Trigger 723The LOGON Trigger 723The LOGOFF Trigger 723The SERVERERROR Trigger 724INSTEAD OF Triggers 728Creating an INSTEAD OF Trigger 728The INSTEAD OF INSERT Trigger 730The INSTEAD OF UPDATE Trigger 732The INSTEAD OF DELETE Trigger 733Populating the Tables 733INSTEAD OF Triggers on Nested Tables 734AFTER SUSPEND Triggers 736Setting Up for the AFTER SUSPEND Trigger 736Looking at the Actual Trigger 738The ORA_SPACE_ERROR_INFO Function 739The DBMS_RESUMABLE Package 740Trapped Multiple Times 742To Fix or Not to Fix? 743Maintaining Triggers 743Disabling, Enabling, and Dropping Triggers 743Creating Disabled Triggers 744Viewing Triggers 745Checking the Validity of Triggers 74620. Managing PL/SQL Code 749Managing Code in the Database 750Overview of Data Dictionary Views 751Display Information About Stored Objects 753Display and Search Source Code 753Use Program Size to Determine Pinning Requirements 755Obtain Properties of Stored Code 756Analyze and Modify Trigger State Through Views 757Analyze Argument Information 758Analyze Identifier Usage (Oracle Database 11gâs PL/Scope) 759Managing Dependencies and Recompiling Code 762Analyzing Dependencies with Data Dictionary Views 763Fine-Grained Dependency (Oracle Database 11g) 767Remote Dependencies 769Limitations of Oracleâs Remote Invocation Model 772Recompiling Invalid Program Units 773Compile-Time Warnings 777A Quick Example 777Enabling Compile-Time Warnings 778Some Handy Warnings 780Testing PL/SQL Programs 788Typical, Tawdry Testing Techniques 789General Advice for Testing PL/SQL Code 793Automated Testing Options for PL/SQL 794Tracing PL/SQL Execution 795DBMS_UTILITY.FORMAT_CALL_STACK 796UTL_CALL_STACK (Oracle Database 12c) 798DBMS_APPLICATION_INFO 801Tracing with opp_trace 803The DBMS_TRACE Facility 804Debugging PL/SQL Programs 808The Wrong Way to Debug 809Debugging Tips and Strategies 811Using Whitelisting to Control Access to Program Units 816Protecting Stored Code 818Restrictions on and Limitations of Wrapping 818Using the Wrap Executable 819Dynamic Wrapping with DBMS_DDL 819Guidelines for Working with Wrapped Code 821Introduction to Edition-Based Redefinition (Oracle Database 11g Release 2) 82121. Optimizing PL/SQL Performance 825Tools to Assist in Optimization 827Analyzing Memory Usage 827Identifying Bottlenecks in PL/SQL Code 827Calculating Elapsed Time 833Choosing the Fastest Program 834Avoiding Infinite Loops 836Performance-Related Warnings 837The Optimizing Compiler 838Insights on How the Optimizer Works 840Runtime Optimization of Fetch Loops 843Data Caching Techniques 844Package-Based Caching 845Deterministic Function Caching 850THe Function Result Cache (Oracle Database 11g) 852Caching Summary 868Bulk Processing for Repeated SQL Statement Execution 869High-Speed Querying with BULK COLLECT 870High-Speed DML with FORALL 877Improving Performance with Pipelined Table Functions 888Replacing Row-Based Inserts with Pipelined Function-Based Loads 889Tuning Merge Operations with Pipelined Functions 896Asynchronous Data Unloading with Parallel Pipelined Functions 898Performance Implications of Partitioning and Streaming Clauses in ParallelPipelined Functions 902Pipelined Functions and the Cost-Based Optimizer 903Tuning Complex Data Loads with Pipelined Functions 909A Final Word on Pipelined Functions 916Specialized Optimization Techniques 917Using the NOCOPY Parameter Mode Hint 917Using the Right Datatype 921Optimizing Function Performance in SQL (12.1 and higher) 922Stepping Back for the Big Picture on Performance 92322. I/O and PL/SQL 925Displaying Information 925Enabling DBMS_OUTPUT 926Write Lines to the Buffer 926Read the Contents of the Buffer 927Reading and Writing Files 929The UTL_FILE_DIR Parameter 929Working with Oracle Directories 931Open Files 932Is the File Already Open? 934Close Files 934Read from Files 935Write to Files 938Copy Files 941Delete Files 942Rename and Move Files 943Retrieve File Attributes 943Sending Email 944Oracle Prerequisites 945Configuring Network Security 946Send a Short (32,767 Bytes or Less) Plain-Text Message 947Include âFriendlyâ Names in Email Addresses 948Send a Plain-Text Message of Arbitrary Length 950Send a Message with a Short (32,767 Bytes or Less) Attachment 951Send a Small File (32,767 Bytes or Less) as an Attachment 953Attach a File of Arbitrary Size 953Working with Web-Based Data (HTTP) 956Retrieve a Web Page in âPiecesâ 956Retrieve a Web Page into a LOB 958Authenticate Using HTTP Username/Password 959Retrieve an SSL-Encrypted Web Page (via HTTPS) 960Submit Data to a Web Page via GET or POST 961Disable Cookies or Make Cookies Persistent 965Retrieve Data from an FTP Server 966Use a Proxy Server 966Other Types of I/O Available in PL/SQL 967Database Pipes, Queues, and Alerts 967TCP Sockets 968Oracleâs Built-in Web Server 968Part VI. Advanced PL/SQL Topics23. Application Security and PL/SQL 971Security Overview 971Encryption 973Key Length 974Algorithms 975Padding and Chaining 977The DBMS_CRYPTO Package 977Encrypting Data 979Encrypting LOBs 982SecureFiles 982Decrypting Data 983Performing Key Generation 984Performing Key Management 985Cryptographic Hashing 991Using Message Authentication Codes 993Using Transparent Data Encryption 994Transparent Tablespace Encryption 997Row-Level Security 999Why Learn About RLS? 1002A Simple RLS Example 1003Static Versus Dynamic Policies 1007Using Column-Sensitive RLS 1012RLS Debugging 1015Application Contexts 1019Using Application Contexts 1020Security in Contexts 1022Contexts as Predicates in RLS 1022Identifying Nondatabase Users 1026Fine-Grained Auditing 1028Why Learn About FGA? 1029A Simple FGA Example 1030Access How Many Columns? 1032Checking the Audit Trail 1033Using Bind Variables 1035Using Handler Modules 103624. PL/SQL Architecture 1039DIANA 1039How Oracle Executes PL/SQL Code 1040An Example 1041Compiler Limits 1044The Default Packages of PL/SQL 1045Execution Authority Models 1048The Definer Rights Model 1049The Invoker Rights Model 1054Combining Rights Models 1056Granting Roles to PL/SQL Program Units (Oracle Database 12c) 1057âWho Invoked Me?â Functions (Oracle Database 12c) 1060BEQUEATH CURRENT_USER for Views (Oracle Database 12c) 1061Constraining Invoker Rights Privileges (Oracle Database 12c) 1063Conditional Compilation 1064Examples of Conditional Compilation 1065The Inquiry Directive 1066The $IF Directive 1070The $ERROR Directive 1072Synchronizing Code with Packaged Constants 1072Program-Specific Settings with Inquiry Directives 1073Working with Postprocessed Code 1074PL/SQL and Database Instance Memory 1076The SGA, PGA, and UGA 1076Cursors, Memory, and More 1077Tips on Reducing Memory Use 1079What to Do If You Run Out of Memory 1090Native Compilation 1093When to Run in Interpreted Mode 1094When to Go Native 1094Native Compilation and Database Release 1094What You Need to Know 109525. Globalization and Localization in PL/SQL 1097Overview and Terminology 1099Unicode Primer 1100National Character Set Datatypes 1102Character Encoding 1102Globalization Support Parameters 1104Unicode Functions 1105Character Semantics 1111String Sort Order 1115Binary Sort 1116Monolingual Sort 1117Multilingual Sort 1119Multilingual Information Retrieval 1120IR and PL/SQL 1123Date/Time 1126Timestamp Datatypes 1126Date/Time Formatting 1127Currency Conversion 1131Globalization Development Kit for PL/SQL 1133UTL_118N Utility Package 1133UTL_LMS Error-Handling Package 1136GDK Implementation Options 113726. Object-Oriented Aspects of PL/SQL 1141Introduction to Oracleâs Object Features 1142Object Types by Example 1144Creating a Base Type 1144Creating a Subtype 1146Methods 1147Invoking Supertype Methods in Oracle Database 11g and Later 1152Storing, Retrieving, and Using Persistent Objects 1154Evolution and Creation 1162Back to Pointers? 1164Generic Data: The ANY Types 1171I Can Do It Myself 1176Comparing Objects 1179Object Views 1184A Sample Relational System 1186Object View with a Collection Attribute 1188Object Subview 1191Object View with Inverse Relationship 1192INSTEAD OF Triggers 1193Differences Between Object Views and Object Tables 1196Maintaining Object Types and Object Views 1197Data Dictionary 1197Privileges 1199Concluding Thoughts from a (Mostly) Relational Developer 120127. Calling Java from PL/SQL 1205Oracle and Java 1205Getting Ready to Use Java in Oracle 1207Installing Java 1207Building and Compiling Your Java Code 1208Setting Permissions for Java Development and Execution 1209A Simple Demonstration 1212Finding the Java Functionality 1212Building a Custom Java Class 1213Compiling and Loading into Oracle 1215Building a PL/SQL Wrapper 1217Deleting Files from PL/SQL 1217Using loadjava 1218Using dropjava 1221Managing Java in the Database 1221The Java Namespace in Oracle 1221Examining Loaded Java Elements 1222Using DBMS_JAVA 1223LONGNAME: Converting Java Long Names 1223GET_, SET_, and RESET_COMPILER_OPTION: Getting and Setting (a Few) Compiler Options 1224SET_OUTPUT: Enabling Output from Java 1225EXPORT_SOURCE, EXPORT_RESOURCE, and EXPORT_CLASS:Exporting Schema Objects 1226Publishing and Using Java in PL/SQL 1228Call Specs 1228Some Rules for Call Specs 1229Mapping Datatypes 1230Calling a Java Method in SQL 1232Exception Handling with Java 1232Extending File I/O Capabilities 1236Other Examples 124028. External Procedures 1243Introduction to External Procedures 1244Example: Invoking an Operating System Command 1244Architecture of External Procedures 1246Oracle Net Configuration 1248Specifying the Listener Configuration 1248Security Characteristics of the Configuration 1251Setting Up Multithreaded Mode 1252Creating an Oracle Library 1254Writing the Call Specification 1256The Call Spec: Overall Syntax 1257Parameter Mapping: The Example Revisited 1258Parameter Mapping: The Full Story 1260More Syntax: The PARAMETERS Clause 1262PARAMETERS Properties 1263Raising an Exception from the Called C Program 1266Nondefault Agents 1269Maintaining External Procedures 1272Dropping Libraries 1272Data Dictionary 1272Rules and Warnings 1273A. Regular Expression Metacharacters and Function Parameters 1275B. Number Format Models 1281C. Date Format Models 1285Index 1291