SQL*Plus is also frequently used as a tool for loading stored code, such as a stored procedure, into the database.. Following proper procedures is important, and SQL*Plus allows me to en
Trang 1Every day, computer professionals the world over wake up, travel to the office, sit down in front of a computer, and begin another day working with that database called Oracle Programmers write queries and stored procedures
Database administrators monitor performance, make database changes, and perform other maintenance tasks
Operations people may need to back up or recover a database Analysts may need to explore the structure of a database
to answer the question What's out there? Testers may work on developing and loading test data A wide variety of
people perform a wide variety of tasks, yet the vast majority of them are likely to have one thing in commonSQL*Plus SQL*Plus is the command-line interface to the Oracle database It's a client-server application that allows you to enter and execute SQL statements and PL/SQL blocks One of the most common uses for SQL*Plus is as an ad hoc query tool You type in a SELECT statement, execute it, and see what results come back from the database Programmers do this all the time when developing queries and when experimenting with Oracle's built-in functions Database
administrators sometimes issue queries against Oracle's data dictionary tables in order to see what objects are out there
in the database
One important capability of SQL*Plus is its ability to format and paginate query results You can enter a SELECT statement, execute it, and have the results formatted so you can print them and produce a credible-looking report
SQL*Plus implements a full range of formatting commands that allow you to add page headers and footers to your reports There are also commands that allow you to format the data displayed in the report You can control column headings, number formats, and column widths
Another important capability of SQL*Plus, and one you should take advantage of if you don't already, is its ability to run predefined SQL script files A script file is
Trang 2
analogous to a DOS BAT file, and is simply a text file that contains commands to execute These commands may be SQL statements, PL/SQL code blocks, or SQL*Plus commands Scripts may be used to automate frequently-performed tasks One of the easiest things to do is to write a script to generate a report You do this by placing all the formatting commands and the SELECT query for the report into the script file Then whenever you want the report, you just
execute the script In addition to producing printed reports, scripts may also be used to automate routine tasks such as creating a new user, or they may be used to display data on the screen You might, for example, write a script to display constraint definitions for a table, or perhaps to list the system privileges granted to one of your users
SQL*Plus is also frequently used as a tool for loading stored code, such as a stored procedure, into the database Years ago it used to be that SQL*Plus was just about the only tool that could be used to load and compile a stored procedure, trigger, or package That situation has changed somewhat with the arrival of new GUIbased tools, but many people still rely on the old workhorse SQL*Plus for this purpose
A sometimes overlooked capability of SQL*Plus is its use as a data extraction tool If you've been around Oracle for a while, you are no doubt familiar with SQL*Loader SQL*Loader is Oracle's general-purpose data load utility Using it, you can read data from a flat file and load it into one or more database tables The strange thing is that Oracle does not have a corresponding SQL*Unloader utility When people want to extract data from Oracle into a flat file, such as a commadelimited file, they often get frustrated when looking for a utility to do the job SQL*Plus, it turns out, is a viable choice for the task It's a relatively simple matter to spool the results of a query to a file It doesn't take much extra work
to format that output so that it is comma- or tab-delimited
Finally, SQL*Plus gives you a reliable way to propagate database structure changes when you need to make the same change to more than one database If you have a table change that needs to be made on several similar databases, you can write a SQL*Plus script to do the job This script can easily be executed against each database, saving you the trouble of making the same change several times over This is a great convenience if you deal with clients in a variety of locations, because you can send the script out to each client, where it can be executed by the staff against the database
To many people, SQL*Plus, with its command-line interface, must seem increasingly like an anachronism Graphical user interfaces are prevalent everywhere, and often it seems as if computer users have forgotten how to do anything but point and click with a mouse You might ask, then, Why bother to learn SQL*Plus? Why bother with an ancient
command-line utility?These are fair questions
Trang 3
I have come to lean heavily on SQL*Plus because it is always there, and it always works In my work as a consultant, I frequently visit clients and work with databases on a variety of platforms Some sites have Enterprise Manager installed Some do not Some Unix sites lean more heavily on the GUI version of Server Manager, and others actually do most of their work at the command line One thing I can always count on, no matter where I go, is that SQL*Plus will be
available Not only is SQL*Plus available on the database administrator's PC, it is often available on user PCs as well
No matter which machine I use at a client site, I can almost always count on this venerable utility being available, and because I know it well, I can immediately be productive
Scripting and batch processing are two other reasons I use SQL*Plus Following proper procedures is important, and SQL*Plus allows me to encapsulate the commands necessary to add a new database user into one script, so each time I create a new user it is done consistently
Finally, one more reason I use SQL*Plus is speed I type very fast, and I type very accurately Wonderful as many of the modern GUI applications are, I can often perform a task more quickly using SQL*Plus This is not always true, but
it is true often enough, especially when you consider the time it takes to load and start a GUI interface such as
Enterprise Manager versus the time it takes to load and start SQL*Plus
Why I Wrote This Book
My motivation for writing this book stems from my early experiences learning about the Oracle database Oracle's documentation tends to be very narrowly focused, each manual discussing only those things strictly related to the
product being written about, and the manual for SQL*Plus is no exception Oracle's manual will tell you about
SQL*Plus, but only about SQL*Plus There is little information on how to use SQL*Plus in conjunction with other Oracle products such as PL/SQL or SQL*Loader There is also little information on using SQL*Plus to perform
common tasks like viewing a constraint definition or extracting data
I remember clearly the frustration of working with three manuals spread out in front of me: the SQL manual, the
SQL*Plus manual, and the PL/SQL manual I remember the frustration of frequently picking up the wrong manual because I didn't understand clearly the relationship between these three products Was DESCRIBE a SQL command? How could I use a SQL*Plus variable in a PL/SQL script?
Even when I knew that something could be done with SQL*Plus, I frequently didn't find clear direction in the Oracle manuals The first time I wrote a script to extract data to a file, I spent quite a bit of time flipping back and forth in the
Trang 4
ual and experimenting with various commands before I finally got the results I wanted Things became even more
complicated when I began to write scripts and batch jobs with SQL*Plus Suddenly I found myself wanting to branch, and even to loop, from a SQL*Plus script SQL*Plus doesn't officially provide this functionality, but there are some tricks you can put to good use
Finally, this is the book I want to give my clients and coworkers when they ask me how-to questions Next time I'm asked how to get data out of Oracle and into a comma-delimited file, I'll just refer them to Chapter 5 When I'm asked about formatting a report, I'll refer them to Chapter 3, and when I'm asked how to write an IF statement in SQL*Plus, I'll refer them to Chapter 7 Each of these chapters presents a solution to its respective problem, and leads you step by step through the process of implementing that solution
Objectives of This Book
The single, driving objective of this book is to help you squeeze every last possible ounce of productivity and usefulness out of SQL*Plus If you read this book cover to cover, at the end you will have learned:
Methodical approaches to common tasks such as generating a report and extracting data to a flat file
How to enter and edit commands in the SQL*Plus environment, with and without an external editor
How to write simple scripts using SQL*Plus
How to prompt for user input and use that input in SQL commands, PL/SQL blocks, and SQL*Plus commands
How to stretch the limits of what you can do in a SQL*Plus script by implementing pseudo-IF statements, and by using one script to generate another
How the Product User Profile, an Oracle security feature, works with SQL*Plus
How to customize your SQL*Plus environment
How you can use SQL*Plus to view the definitions for database objects such as views, tables, constraints, triggers, indexes, and synonyms
How to use SQL*Plus as a tuning aid to maximize the performance of your SQL queries
An additional objective of this book is to serve as a ready reference you can pull out when faced with a common task If you need to generate a report, open to the chapter on reports and follow the steps Need to extract data? Open to the chapter on data extraction, and again just follow the steps Every effort has been made to organize the information topically, so that all the information you need to
Trang 5
accomplish a specific task is in one chapter Where feasible, step-by-step instructons are provided so you don't need to wade through a lot of theory in order to accomplish something
Structure of This Book
This book is divided into elevan chapters and two appendixes The chapters are task-oriented and show you how you can use SQL*Plus to perform common tasks such as printing a report, or extracting data to a file The appendixes
contain reference material, such as a list of all SQL*Plus commands
Chapter 1, Introduction to SQL*Plus, goes into more detail about what SQL*Plus really is and why you should master
it It gives you a taste of the many different tasks SQL*Plus can be used for A short history of SQL*Plus is included, as well as a description of the database used for many of the examples in this book, particularly the reporting examples
Chapter 2, Interacting with SQL*Plus, shows you how to start SQL*Plus, enter, execute, and edit commands This is
basic information you need to know
Chapter 3, Generating Reports with SQL*Plus, explains the reporting features of SQL*Plus, and also presents a
step-by-step method for creating a report that has worked very well for me
Chapter 4, Writing SQL*Plus Scripts, explains the basic scripting capabilities of SQL*Plus Primarily, this chapter
shows how SQL*Plus substitution variables work, and how you can use them to your advantage In addition, it covers the subject of getting input from a user, and shows you how to control the output the user sees as the script is executed
Chapter 5, Extracting and Loading Data, shows how you can use SQL*Plus to extract data from an Oracle database and
place it into a text file suitable for loading into another program such as a spreadsheet This text file may be deimited,
by commas, for example, or it may consist of fixed-width columns The chapter ends with an example showing how SQL*Loader may be used to load that same data into another Oracle database
Chapter 6, Exploring Your Database, shows how you can query Oracle's data dictionary tables in order to see the
structure of commonly-used database objects, such as tables and indexes
Chapter 7, Advanced Scripting, builds on Chapter 4, but covers some advanced, and sometimes unusual, scripting
techniques This chapter introduces bind variables, and explains how they are different from user variables This chapter also
Trang 6
shows some creative techniques you can use to add some limited branching, and even some looping, to your SQL*Plus scripts
Chapter 8, Tuning and Timing, presents the SQL*Plus features that support the tuning of SQL statements Also covered
in this chapter is Oracle's EXPLAIN PLAN command, which lets you get a look at the execution strategy that the
Oracle optimizer will user for any given SQL statement
Chapter 9, The Product User Profile, introduces a security feature that a database administrator can use to limit what a
user can do with SQL*Plus The product user profile allows you to turn off specific SQL and SQL*Plus commands for one user or a group of users It can also be used to limit a user's access to certain roles while connected via SQL*Plus
Chapter 10, Administration with SQL*Plus, covers the new administrative commands that have been added to
SQL*Plus beginning with version 8.1 (available with Oracle8i) These commands are the same ones that the Server Manager product implements They have been added to SQL*Plus in preparation for Server Manager's demise
Chapter 11, Customizing Your SQL*Plus Environment, shows a number of ways in which you may customize your
SQL*Plus environment The site and user profiles are explained, as well as several registry settings that affect users on Windows 95, 98, and NT
Appendix A, SQL*Plus Command Reference, contains syntax diagrams for all SQL*Plus commands.
Appendiax B,SQL*Plus Format Elements, describes the various format elements that may be used to build up format
strings to be used with commands, such as COLUMN and ACCEPT, that format output or a accept user input
Audience
I like to think there is something in this book for everyone: programmers, database administrators, and other technically inclined Oracle users.If you work with Oracle on a daily basis, and if you use SQL*Plus in your work, then you need to know what's in this book If you are someone just learning Oracle, this book will provide you with a good understanding
of SQL*Plus, how it fits into the Oracle environment, and how you can use it productively You know, if you've read this far, that SQL*Plus is a multifaceted product, and can be used for a wide variety of tasks You can benefit by
learning to get the most out of the tools you work with on a daily basis
Trang 7
Obtaining the Scripts and Sample Data.
Many examples from the book, as well as SQL*Plus scripts to load the data used for the examples, can be download from O'Reilly's web sit at http:// www.oreilly.com/catalog/orsqplus.
To load the data, download the file named SAMPLE_DATA.ZIP, unzip the files and follow the instructons given in
Chapter 1
Conventions Used in This Book
The following conventions are used in this book:
Italic
Used for filenames, directory names, URLs, and occasional emphasis
Constant width
Used for code examples
Constant width bold
Used in examples that show interaction between SQL*Plus and a user Commands typed by the user are shown in bold, while output from SQL*Plus is shown in normal text
Constant width italiac
In some code examples, indicates an element (e.g., a filename) you supply
UPPERCASE
In code examples, indicates PL/SQL keywords In text, indicates PL/SQL keywords, table names, and column names
lowercase
In code examples, indicates user-defined item such as variables, parameters, ect
Punctution
In code examples, enter exactly as shown
Indentation
In code examples, helps to show structure (but is not required)
In code examples, a double hypen begins a single-line comment, which extends to the end of a line
/*and*/
In code examples, these characters delimit a multiline comment, which can extend from one line to another
In code examples and related discussions, a dot qualifies a reference by separating an object name from a
component name In this book, do notation is
Trang 8
most often used in fully-qualified column names, which you will see written as table_name.field_name The dot
separates the table name from the column name
<> In syntax descriptions, angle brackets enclose the name of a syntactic element
[] In syntax descriptions, square brackets enclose optional items
{} In syntax descriptions, curly brackets enclose a set of items from which yu must choose only one
¦ In syntax descriptions, a vertical bar separates the items enclosed in curly brackets, as in {VARACHAR2 ¦ DATE ¦ NUMBER}
Indicates a tip, suggestion, or general note For example, we'll tell you if you need to use a particular Oracle version or if an operation requires certain privileges
Indicates a warning or caution For example, we'll tell you if Oracle does not behave as you'd expect or if a particular operation has a negative impact on performance
Which Platform and Version?
SQL*Plus changes frequently Each new version brings with it new commands, and new options to use with old
commands Most of the examples in this book use SQL*Plus 8.0 A few use SQL*Plus 2.3, and the ones in Chapter 10,
Administration with SQL*Plus, use Oracle8i and SQL *Plus 8.1 You should be able to apply the information in this
book toany reasonably current version of the product If you have any doubts about whether or not a command will
work with the specific version of SQL*Plus you are using, check the SQL*Plus User's Guide and Reference manual for
that version
A note is in order on operating systems Throughout the book, references are made to the Windows operating system Whenever you see the term Windows used, please understand it to mean Windows NT, Windows 95, Windows 3.1, Windows 3.11, Windows 98, or whatever other flavor of Windows might exist
Trang 9
How to Contact Us
We have tested and verified the information in this book to the best of our ability, but you may find that features have changed (or even that we have made mistakes!) Please let us know about any errors you find, as well as your
suggestions for future editions, by wirting to:
O'Reilly & Associates, Inc
101 Morris Street
Sebastopol, CA 95472
1-800-998-9938 (in the U.S or Canada)
1-707-829-0515 (international/local)
1-707-829-0104 (FAX)
You can also send us messages electronically To be put on the mailing list or request a catalog, send email to:
info@oreilly.com
To ask technical questional ro comment on the book, send email to:
bookquestions@oreilly.com
We have a web site for the book, where we'll list examples, errata, and any plans for future editions You can access this page at:
http://www.oreilly.com/catalog/orsqplus/
For more information about this book and others, see the O'Reilly web site:
http://www.oreilly.com
Acknowledgments
The first book that I ever wrote consumed so much energy that I promised myself, and my family, that I would never write another That promise lasted about two months, when I became consumed with the idea of wirting the book you are now reading I owe a lot to my wife Donna, who understands my drive to write, and who bears a lot more of the load than she should have to while I hole up in my office and work This book has been my excuse for avoiding just about every household chore imaginable, yet Donna had been very supportive during the endeavor
My children have also contributed to the development of this book If nothing else, they burst into my office on a daily
to distract me, and to remind me that there are more important things in life than typing on a computer all day They have also contributed time that I might otherwise have spent with them My
Trang 10
three-year-old son Jeff has grown up watching me write, and must think that all daddies come with a laptop computer attached To my daughter Jenny, I want to say that I have enjoyed all our late-night excursions together to the local bookstore I'm glad to see that you have developed the same love for books that I have You may not always believe it,
but you are my pride and joy I see a lot of myself in you, and I'm glad you ended up as my daughter.
My profound thanks also go out to John-Paul Navarro and David Dreyer, who read each chapter as it was written David Dreyer is an independent consultant residing near Detroit, Michigan, and specializes in PowerBuilder and Oracle
development Dave is one of the most cerebral programmers that I know Always calm and thoughtful, Dave has added
a great deal to this book with his insightful comments John-Paul Navarro is a systems administrator for Argonne
National Laboratories in Argonne, Illinois John-Paul and I go way back both as friends and colleagues, and I have no end of respect for his technical abilities He was always willing to discuss technical issues that came up during the writing of this book, and for that I am in his debt
Thanks to Alison Holloway, product manager for SQL*Plus Home for Alison, and SQL*Plus, too, in case you ever wondered, is in Melbourne, Australia Alison helped dig up background information and history on SQL*Plus She provided information on new features being added to SQL*Plus for the upcoming Oracle8i release, and also provided
me with an early look at the documentation Without her help, chapter 10 would not exist In addition to all her other help, Alison did a technical review of the entire book after it was written
Krik Bradley, Ken Jacobs, Jay Rossiter, and Richard Rendell, all of Oracle Corporation, provided the historical
information about SQL*Plus in Chapter 1 It's always nice to know something of the tools one works with besides just the raw technical details of how they are used SQL*Plus has been around a long time, and Kirk, Ken, and Richard have provided some interesting historical tidbits
A number of technical reviewers read and commented on the final manuscript These include David Kaufman of TUSC, Dave Kreines, Eric Givler, Alison Holloway, and John-Paul Navarro I am grateful to each of these people for giving
me an unbiased view of the manuscript, pointing out errors, and providing suggestions on ways to improve the clarity of the text This book is the better for their efforts
Howard Vanderstow and Paul Cheney, both database administrators with the State of Michigan's Office of Technology Resources, provided some welcome assistance in generating the examples for the HELP command in Chapter 2 They also helped me research the location and structure of the database table containing the help text used by SQL*Plus