You are previewing Oracle SQL*Plus: The Definitive Guide, 2nd Edition.
O'Reilly logo
Oracle SQL*Plus: The Definitive Guide, 2nd Edition

Book Description

Despite its wide availability and usage, few developers and DBAs have mastered the true power of Oracle SQL*Plus. This bestselling book--now updated for Oracle 10g--is the only in-depth guide to this interactive query tool for writing SQL scripts. It's an essential resource for any Oracle user. The new second edition of Oracle SQL*Plus: The Definitive Guide clearly describes how to perform, step-by-step, all of the tasks that Oracle developers and DBAs want to perform with SQL*Plus--and maybe some you didn't realize you could perform. With Oracle SQL*Plus: The Definitive Guide, you'll expertly:

  • write and execute script files

  • generate ad hoc reports

  • extract data from the database

  • query the data dictionary tables

  • customize an SQLPlus environment

  • and much more

It also includes a handy quick reference to all of its syntax options and an often-requested chapter on SQL itself, along with a clear, concise, and complete introduction. This book is truly the definitive guide to SQLPlus. It's an indispensable resource for those who are new to SQL*Plus, a task-oriented learning tool for those who are already using it, and an immediately useful quick reference for every user. If you want to leverage the full power and flexibility of this popular Oracle tool, you'll need this book.

Table of Contents

  1. Oracle SQL*Plus: The Definitive Guide, 2nd Edition
  2. A Note Regarding Supplemental Files
  3. Preface
    1. Why I Wrote This Book
    2. Objectives of This Book
    3. What's New in the Second Edition?
    4. Which Platform and Version?
    5. Structure of This Book
    6. Obtaining the Scripts and Sample Data
    7. What About Those Names?
    8. Conventions Used in This Book
    9. Using Code Examples
    10. Comments and Questions
    11. Acknowledgments from the First Edition
    12. Second Edition Acknowledgments
  4. 1. Introduction to SQL*Plus
    1. 1.1. What Is SQL*Plus?
      1. 1.1.1. Uses for SQL*Plus
      2. 1.1.2. SQL*Plus's Relation to SQL, PL/SQL, and the Oracle Database
    2. 1.2. History of SQL*Plus
    3. 1.3. Why Master SQL*Plus?
    4. 1.4. Creating and Loading the Sample Tables
      1. 1.4.1. The Data Model
      2. 1.4.2. The Tables
        1. 1.4.2.1. EMPLOYEE table
        2. 1.4.2.2. PROJECT table
        3. 1.4.2.3. PROJECT_HOURS table
      3. 1.4.3. The Data
        1. 1.4.3.1. EMPLOYEE table
        2. 1.4.3.2. PROJECT table
        3. 1.4.3.3. PROJECT_HOURS table
      4. 1.4.4. Loading the Sample Data
        1. 1.4.4.1. Step 1: Download and unzip the script files
        2. 1.4.4.2. Step 2: Start SQL*Plus
        3. 1.4.4.3. Step 3: Log into your Oracle database
        4. 1.4.4.4. Step 4: Run the bld_db.sql script file
  5. 2. Command-Line SQL*Plus
    1. 2.1. Starting Command-Line SQL*Plus
      1. 2.1.1. Connecting to a Default Database
      2. 2.1.2. Connecting to a Remote Database
      3. 2.1.3. Specifying Login Details on the Command Line
    2. 2.2. Starting Windows SQL*Plus
    3. 2.3. Some Basic SQL*Plus Commands
      1. 2.3.1. EXIT
      2. 2.3.2. PASSWORD
      3. 2.3.3. HELP
      4. 2.3.4. DESCRIBE
      5. 2.3.5. CONNECT
      6. 2.3.6. DISCONNECT
      7. 2.3.7. HOST
    4. 2.4. Running SQL Queries
    5. 2.5. Working with PL/SQL
      1. 2.5.1. What Is a PL/SQL Block?
      2. 2.5.2. Executing a PL/SQL Block
        1. 2.5.2.1. Where's the output?
        2. 2.5.2.2. Rules for entering PL/SQL blocks
      3. 2.5.3. Executing a Single PL/SQL Statement
    6. 2.6. The SQL Buffer
    7. 2.7. Line Editing
      1. 2.7.1. The Current Line
      2. 2.7.2. Line-Editing Commands
        1. 2.7.2.1. Getting a statement into the buffer
        2. 2.7.2.2. LIST
        3. 2.7.2.3. APPEND
        4. 2.7.2.4. CHANGE
        5. 2.7.2.5. DEL
        6. 2.7.2.6. INPUT
        7. 2.7.2.7. Retyping a line
    8. 2.8. Executing the Statement in the Buffer
      1. 2.8.1. If Your Statement Has an Error
      2. 2.8.2. Doing It Again
    9. 2.9. Saving and Retrieving the Buffer
      1. 2.9.1. SAVE
      2. 2.9.2. GET
    10. 2.10. The EDIT Command
      1. 2.10.1. Choosing Your Editor
      2. 2.10.2. Invoking the Editor
      3. 2.10.3. Beware Editing Conflicts!
      4. 2.10.4. Formatting Your Command
      5. 2.10.5. Getting Back to SQL*Plus
    11. 2.11. Executing a Script
    12. 2.12. The Working Directory
  6. 3. Browser-Based SQL*Plus
    1. 3.1. Starting iSQL*Plus
      1. 3.1.1. Starting the iSQL*Plus Server
      2. 3.1.2. Using a Supported Browser
      3. 3.1.3. Connecting to a Database
      4. 3.1.4. Connecting as an Administrator
        1. 3.1.4.1. Creating iSQL*Plus DBA users
        2. 3.1.4.2. Authenticating to iSQL*Plus as a DBA
      5. 3.1.5. Ending a Session
    2. 3.2. Executing SQL*Plus Commands
    3. 3.3. Running SQL Queries
      1. 3.3.1. Paging Through Results
      2. 3.3.2. Getting Output as Plain Text
    4. 3.4. Working with PL/SQL
    5. 3.5. Executing Scripts
      1. 3.5.1. Using the @ Command
      2. 3.5.2. Using the Load Script Button
    6. 3.6. iSQL*Plus Command History
  7. 4. A Lightning SQL Tutorial
    1. 4.1. Data Manipulation Statements
      1. 4.1.1. Inserting Data into a Table
      2. 4.1.2. Retrieving Data from a Table
        1. 4.1.2.1. Multiple conditions
        2. 4.1.2.2. Negating conditions
        3. 4.1.2.3. Table aliases
        4. 4.1.2.4. Column aliases
      3. 4.1.3. Updating Data with New Values
      4. 4.1.4. Deleting Data from a Table
      5. 4.1.5. Merging Data into a Table
    2. 4.2. Transactions
      1. 4.2.1. Protecting Data Integrity
      2. 4.2.2. Backing Out of Unwanted Changes
      3. 4.2.3. You're Always Using Transactions
      4. 4.2.4. Understanding Transaction Types
    3. 4.3. The Concept of Null
      1. 4.3.1. Detecting Nulls
      2. 4.3.2. Nulls in Expressions
    4. 4.4. Table Joins
      1. 4.4.1. Inner Joins
      2. 4.4.2. Outer Joins
      3. 4.4.3. Full Outer Joins
    5. 4.5. Sorting Query Results
    6. 4.6. Grouping and Summarizing
      1. 4.6.1. The GROUP BY Clause
      2. 4.6.2. The HAVING Clause
    7. 4.7. Subqueries
      1. 4.7.1. Treating Rowsets as Tables
      2. 4.7.2. Testing for Representation
      3. 4.7.3. Generating Data for INSERTs and UPDATEs
    8. 4.8. Unions
    9. 4.9. To Learn More
  8. 5. Generating Reports with SQL*Plus
    1. 5.1. Following a Methodology
    2. 5.2. Saving Your Work
    3. 5.3. Designing a Simple Report
      1. 5.3.1. Step 1: Formulate the Query
      2. 5.3.2. Step 2: Format the Columns
        1. 5.3.2.1. Column headings
        2. 5.3.2.2. Numeric display formats
        3. 5.3.2.3. Text display formats
        4. 5.3.2.4. Report output after formatting the columns
      3. 5.3.3. Step 3: Add Page Headers and Footers
        1. 5.3.3.1. The top title
        2. 5.3.3.2. The bottom title
        3. 5.3.3.3. Setting the line width
        4. 5.3.3.4. Report output with page titles
      4. 5.3.4. Step 4: Format the Page
        1. 5.3.4.1. How many lines on a page?
        2. 5.3.4.2. Setting the pagesize
        3. 5.3.4.3. Setting the page advance
      5. 5.3.5. Step 5: Print It
        1. 5.3.5.1. Spooling to a file
        2. 5.3.5.2. The final script
        3. 5.3.5.3. Executing the report
        4. 5.3.5.4. Printing the file
    4. 5.4. Master/Detail Reports
      1. 5.4.1. Suppressing Duplicate Column Values
      2. 5.4.2. Page and Line Breaks
        1. 5.4.2.1. Adding a page break
        2. 5.4.2.2. Adding a line break
        3. 5.4.2.3. Report output with page and line breaks
      3. 5.4.3. Master/Detail Formatting
        1. 5.4.3.1. Retrieve the employee information into substitution variables
        2. 5.4.3.2. Modify the page heading to print the employee name and ID
        3. 5.4.3.3. Revisit the report width and the width of the remaining fields
        4. 5.4.3.4. Printing data in a page footer
  9. 6. Creating HTML Reports
    1. 6.1. Getting the Data into an HTML Table
    2. 6.2. Generating the Entire Page
      1. 6.2.1. Using SQL*Plus's Default Formatting
      2. 6.2.2. Taking Control of the Page Format
    3. 6.3. Another Approach to Headers
    4. 6.4. Master/Detail Reports in HTML
  10. 7. Advanced Reports
    1. 7.1. Totals and Subtotals
      1. 7.1.1. Printing Subtotals
      2. 7.1.2. Printing Grand Totals
        1. 7.1.2.1. Grand totals and pagination
        2. 7.1.2.2. Grand totals and the final detail record
        3. 7.1.2.3. Grand totals and the lack of a label
    2. 7.2. Getting the Current Date into a Header
      1. 7.2.1. Getting the Date from Oracle
      2. 7.2.2. Formatting the Date
    3. 7.3. Report Headers and Footers
    4. 7.4. Formatting Object Columns
    5. 7.5. Summary Reports
    6. 7.6. Taking Advantage of Unions
      1. 7.6.1. A Typical Union Example
      2. 7.6.2. The UNION Query
      3. 7.6.3. The Final Report
  11. 8. Writing SQL*Plus Scripts
    1. 8.1. Why Write Scripts?
    2. 8.2. Using Substitution Variables
      1. 8.2.1. What Is a Substitution Variable?
      2. 8.2.2. Using Single-Ampersand Variables
        1. 8.2.2.1. The report for one specific employee
        2. 8.2.2.2. Generalizing the report with substitution variables
        3. 8.2.2.3. Running the report
        4. 8.2.2.4. When TERMOUT is off
      3. 8.2.3. Using Double-Ampersand Variables
        1. 8.2.3.1. An example that prompts twice for the same value
        2. 8.2.3.2. A modified example that prompts once
        3. 8.2.3.3. A final caveat
    3. 8.3. Prompting for Values
      1. 8.3.1. The ACCEPT Command
      2. 8.3.2. The PROMPT Command
        1. 8.3.2.1. Using PROMPT to summarize the script
        2. 8.3.2.2. Using PROMPT to explain the output
    4. 8.4. Cleaning Up the Display
      1. 8.4.1. Turning Off Verification
      2. 8.4.2. Turning Off Feedback
      3. 8.4.3. Turning Off Command Echoing
      4. 8.4.4. Turning Off All Terminal Output
    5. 8.5. Executing a Script
      1. 8.5.1. Invoking a Script from the Command Line
      2. 8.5.2. Accessing Command-Line Arguments
      3. 8.5.3. Specifying a Search Path for Scripts
      4. 8.5.4. Placing SQL*Plus Commands into a Shell Script
      5. 8.5.5. Creating a Windows Shortcut
        1. 8.5.5.1. Starting the SQL*Plus executable
        2. 8.5.5.2. Creating the shortcut
      6. 8.5.6. Executing a Script Over the Internet
    6. 8.6. Controlling Variable Substitution
      1. 8.6.1. The Escape Character
        1. 8.6.1.1. Enabling the escape feature
        2. 8.6.1.2. Escaping an ampersand
        3. 8.6.1.3. Changing the escape character
      2. 8.6.2. The Concatenation Character
        1. 8.6.2.1. Turning off the concatenation feature
        2. 8.6.2.2. Changing the concatenation character
      3. 8.6.3. Enabling and Disabling Substitution
      4. 8.6.4. Changing the Substitution Variable Prefix Character
    7. 8.7. Commenting Your Scripts
      1. 8.7.1. The REMARK Command
      2. 8.7.2. The /* and */ Delimiters
      3. 8.7.3. Double Hyphens (- -)
      4. 8.7.4. Substitution Within Comments
    8. 8.8. Resetting Your SQL*Plus Environment
    9. 8.9. Scripting Issues with iSQL*Plus
  12. 9. Extracting and Loading Data
    1. 9.1. Types of Output Files
      1. 9.1.1. Delimited Files
      2. 9.1.2. Fixed-Width Files
      3. 9.1.3. DML Files
      4. 9.1.4. DDL Files
    2. 9.2. Limitations of SQL*Plus
    3. 9.3. Extracting the Data
      1. 9.3.1. Formulate the Query
      2. 9.3.2. Format the Data
        1. 9.3.2.1. Comma-delimited
        2. 9.3.2.2. Fixed-width
        3. 9.3.2.3. DML
        4. 9.3.2.4. DDL
      3. 9.3.3. Spool the Extract to a File
      4. 9.3.4. Make Your Extract Script User-Friendly
    4. 9.4. An Excel-Specific HTML Hack
    5. 9.5. Reloading the Data
      1. 9.5.1. Executing DDL and DML
      2. 9.5.2. Running SQL*Loader
        1. 9.5.2.1. The control file
        2. 9.5.2.2. Building a control file for comma-delimited data
        3. 9.5.2.3. Building a control file for fixed-width data
        4. 9.5.2.4. Loading the data
      3. 9.5.3. Using an External Table
        1. 9.5.3.1. Creating a directory
        2. 9.5.3.2. Creating an external table
        3. 9.5.3.3. Loading the data
  13. 10. Exploring Your Database
    1. 10.1. The DESCRIBE Command
      1. 10.1.1. Describing a Table
      2. 10.1.2. Describing Stored Functions and Procedures
      3. 10.1.3. Describing Packages and Object Types
      4. 10.1.4. Why DESCRIBE Is Not Enough
    2. 10.2. Oracle's Data Dictionary Views
      1. 10.2.1. What Is the Data Dictionary?
      2. 10.2.2. The View Types: user, all, and dba
    3. 10.3. Tables
      1. 10.3.1. Listing Tables You Own
        1. 10.3.1.1. The recycle bin
        2. 10.3.1.2. Tables owned by other users
        3. 10.3.1.3. External tables
        4. 10.3.1.4. Object tables
        5. 10.3.1.5. A combined list of tables
      2. 10.3.2. Listing Column Definitions for a Table
    4. 10.4. Table Constraints
      1. 10.4.1. Check Constraints
      2. 10.4.2. Primary Key and Unique Constraints
      3. 10.4.3. Foreign Key Constraints
    5. 10.5. Indexes
    6. 10.6. Triggers
    7. 10.7. Synonyms
    8. 10.8. Table Security
    9. 10.9. Scripting the Data Dictionary
      1. 10.9.1. Running the Script
      2. 10.9.2. When the Parameter Is Omitted
      3. 10.9.3. Separating Owner and Table Names
      4. 10.9.4. Generating the Index Headings
    10. 10.10. Using SQL to Write SQL
    11. 10.11. The Master Key
  14. 11. Advanced Scripting
    1. 11.1. Bind Variables
      1. 11.1.1. Declaring Bind Variables
      2. 11.1.2. Using Bind Variables and Substitution Variables Together
        1. 11.1.2.1. From substitution to bind
        2. 11.1.2.2. From bind to substitution
      3. 11.1.3. Displaying the Contents of a Bind Variable
        1. 11.1.3.1. Using the PRINT command
        2. 11.1.3.2. PRINTing CLOB variables
        3. 11.1.3.3. PRINTing REFCURSOR variables
        4. 11.1.3.4. SELECTing a bind variable
      4. 11.1.4. When and How to Use Bind Variables
        1. 11.1.4.1. Calling PL/SQL procedures and functions from SQL*Plus
        2. 11.1.4.2. Using REFCURSOR variables
        3. 11.1.4.3. Testing application queries
    2. 11.2. Branching in SQL*Plus
      1. 11.2.1. Simulating Branching by Adjusting the WHERE Clause
      2. 11.2.2. Simulate Branching by Using REFCURSOR Variables
      3. 11.2.3. Branching Using a Multilevel File Structure
      4. 11.2.4. Using SQL to Write SQL
      5. 11.2.5. Using PL/SQL
      6. 11.2.6. Using an Operating-System Scripting Language
    3. 11.3. Looping in SQL*Plus
      1. 11.3.1. Recursive Execution
      2. 11.3.2. Looping Within PL/SQL
    4. 11.4. Validating and Parsing User Input
      1. 11.4.1. Validating Input with ACCEPT
        1. 11.4.1.1. ACCEPTing numeric values
        2. 11.4.1.2. ACCEPTing date values
      2. 11.4.2. Validating Input with SQL
      3. 11.4.3. Parsing Input with SQL
    5. 11.5. Error Handling
      1. 11.5.1. The WHENEVER Command
        1. 11.5.1.1. WHENEVER SQLERROR
        2. 11.5.1.2. Capturing SQL*Plus return codes
        3. 11.5.1.3. PL/SQL errors and WHENEVER
        4. 11.5.1.4. WHENEVER OSERROR
    6. 11.6. Returning Values to Unix
  15. 12. Tuning and Timing
    1. 12.1. Using SQL*Plus Timers
      1. 12.1.1. The SET TIMING Command
      2. 12.1.2. The TIMING Command
        1. 12.1.2.1. Starting and stopping a timer
        2. 12.1.2.2. Displaying the value of a timer
        3. 12.1.2.3. Nesting timers
        4. 12.1.2.4. Finding out how many timers you have going
        5. 12.1.2.5. Stopping all timers
    2. 12.2. Using EXPLAIN PLAN
      1. 12.2.1. Creating the Plan Table
      2. 12.2.2. Explaining a Query
      3. 12.2.3. Interpreting the Results
        1. 12.2.3.1. Using DBMS_XPLAN to display an execution plan
        2. 12.2.3.2. Using a SELECT statement to display an execution plan
        3. 12.2.3.3. Making sense of the results
    3. 12.3. Using AUTOTRACE
      1. 12.3.1. Granting Access to the Performance Views
      2. 12.3.2. Executing a Query with AUTOTRACE On
        1. 12.3.2.1. Showing statistics and the plan
        2. 12.3.2.2. Showing only the plan
        3. 12.3.2.3. Suppressing the query output
        4. 12.3.2.4. Turning AUTOTRACE off
    4. 12.4. Improving on EXPLAIN PLAN Results
      1. 12.4.1. Knowing Good Results from Bad
      2. 12.4.2. Creating Indexes
      3. 12.4.3. Rewriting the Query
      4. 12.4.4. Using Hints
        1. 12.4.4.1. Syntax for a hint
        2. 12.4.4.2. Specifying table and index names
        3. 12.4.4.3. Hint conflicts and applicability
        4. 12.4.4.4. Hint query blocks
      5. 12.4.5. Oracle's Hint Syntax
        1. 12.4.5.1. Optimizer goal hints
        2. 12.4.5.2. Access method hints
        3. 12.4.5.3. Query transformation hints
        4. 12.4.5.4. Join order hints
        5. 12.4.5.5. Join operation hints
        6. 12.4.5.6. Parallel execution hints
        7. 12.4.5.7. Other hints
    5. 12.5. Where to Find More Tuning Information
  16. 13. The Product User Profile
    1. 13.1. What Is the Product User Profile?
      1. 13.1.1. Why Does the Product User Profile Exist?
      2. 13.1.2. The product_profile Table
      3. 13.1.3. How the Product User Profile Works
      4. 13.1.4. Product User Profile Limitations
        1. 13.1.4.1. Issues related to PL/SQL
        2. 13.1.4.2. Issues related to roles
    2. 13.2. Using the Product User Profile
      1. 13.2.1. Creating the Profile Table
      2. 13.2.2. Limiting Access to Commands and Statements
        1. 13.2.2.1. Commands and statements that can be disabled
        2. 13.2.2.2. Disabling a command or statement
        3. 13.2.2.3. Re-enabling a command or statement
      3. 13.2.3. Limiting Access to Roles
        1. 13.2.3.1. Disabling a role
        2. 13.2.3.2. Re-enabling a role
      4. 13.2.4. Reporting on the Product User Profile
        1. 13.2.4.1. Listing all restrictions
        2. 13.2.4.2. Listing restrictions for a particular user
  17. 14. Customizing Your SQL*Plus Environment
    1. 14.1. SQL*Plus Settings You Can Control
    2. 14.2. The Site and User Profiles
      1. 14.2.1. Customizing the SQL*Plus Prompt
      2. 14.2.2. Choosing an Editor
    3. 14.3. Environment Variables That Affect SQL*Plus
      1. 14.3.1. Specifying a Search Path for Scripts
      2. 14.3.2. Designating a Default Net Service Name
      3. 14.3.3. Controlling Language and Character Set
    4. 14.4. Windows GUI SQL*Plus
    5. 14.5. iSQL*Plus User Preferences
  18. A. SQL*Plus Command Reference
    1. A.1. The Command to Invoke SQL*Plus
    2. A.2. Commands You Can Issue Within SQL*Plus
      1. Comment Delimiters (/* . . . */)
      2. Double Hyphen (- -)
      3. At Sign (@)
      4. Double At Sign (@@)
      5. Forward Slash (/)
      6. ACCEPT
      7. APPEND
      8. ARCHIVE LOG
      9. ATTRIBUTE
      10. BREAK
      11. BTITLE
      12. CHANGE
      13. CLEAR
      14. COLUMN
      15. COMPUTE
      16. CONNECT
      17. COPY
      18. DEFINE
      19. DEL
      20. DESCRIBE
      21. DISCONNECT
      22. EDIT
      23. EXECUTE
      24. EXIT
      25. GET
      26. HELP
      27. HOST
      28. INPUT
      29. LIST
      30. PASSWORD
      31. PAUSE
      32. PRINT
      33. PROMPT
      34. QUIT
      35. RECOVER
      36. REMARK
      37. REPFOOTER
      38. REPHEADER
      39. RUN
      40. SAVE
      41. SET APPINFO
      42. SET ARRAYSIZE
      43. SET AUTOCOMMIT
      44. SET AUTOPRINT
      45. SET AUTORECOVERY
      46. SET AUTOTRACE
      47. SET BLOCKTERMINATOR
      48. SET BUFFER
      49. SET CLOSECURSOR
      50. SET CMDSEP
      51. SET COLSEP
      52. SET COMPATIBILITY
      53. SET CONCAT
      54. SET COPYCOMMIT
      55. SET COPYTYPECHECK
      56. SET DEFINE
      57. SET DESCRIBE
      58. SET DOCUMENT
      59. SET ECHO
      60. SET EDITFILE
      61. SET EMBEDDED
      62. SET ESCAPE
      63. SET FEEDBACK
      64. SET FLAGGER
      65. SET FLUSH
      66. SET HEADING
      67. SET HEADSEP
      68. SET INSTANCE
      69. SET LINESIZE
      70. SET LOBOFFSET
      71. SET LOGSOURCE
      72. SET LONG
      73. SET LONGCHUNKSIZE
      74. SET MARKUP
      75. SET MAXDATA
      76. SET NEWPAGE
      77. SET NULL
      78. SET NUMFORMAT
      79. SET NUMWIDTH
      80. SET PAGESIZE
      81. SET PAUSE
      82. SET RECSEP
      83. SET RECSEPCHAR
      84. SET SCAN
      85. SET SERVEROUTPUT
      86. SET SHIFTINOUT
      87. SET SHOWMODE
      88. SET SPACE
      89. SET SQLBLANKLINES
      90. SQLCASE
      91. SET SQLCONTINUE
      92. SET SQLNUMBER
      93. SET SQLPLUSCOMPATIBILITY
      94. SET SQLPREFIX
      95. SET SQLPROMPT
      96. SET SQLTERMINATOR
      97. SET SUFFIX
      98. SET TAB
      99. SET TERMOUT
      100. SET TIME
      101. SET TIMING
      102. SET TRIMOUT
      103. SET TRIMSPOOL
      104. SET TRUNCATE
      105. SET UNDERLINE
      106. SET VERIFY
      107. SET WRAP
      108. SHOW
      109. SHUTDOWN
      110. SPOOL
      111. START
      112. STARTUP
      113. STORE
      114. TIMING
      115. TTITLE
      116. UNDEFINE
      117. VARIABLE
      118. WHENEVER
  19. B. SQL*Plus Format Elements
    1. B.1. Formatting Numbers
    2. B.2. Formatting Character Strings
    3. B.3. Formatting Dates
  20. About the Author
  21. Colophon
  22. Copyright