Oracle sql plus команды
SQL*Plus - программа для работы с СУБД Oracle посредством командной строки. Используя SQL*Plus можно выполнять команды SQL и PL/SQL в интерактивном режиме или используя сценарий.
Основное преимущество SLQ*Plus - доступность, т.к. инструмент доступен практически всегда, когда в системе установлен Oracle. При этом это достаточно мощный инструмент, используя который можно решать различные задачи на удаленных машинах.
К написанию этой статьи меня подтолкнула книга "Oracle SQL*Plus: The Definitive Guide, 2nd Edition", написанная Jonathan Gennick. Как обычно, появилось желание систематизировать информацию и представить ее в удобном виде.
При этом сразу считаю нужным оговориться, что я использую SQLplus для написания и выполнения скриптов на удаленных машинах, в этой статье описываю именно используемые для этого команды.
Область возможного использования SQLplus при этом гораздо шире, например - построение отчетов, в том числе в формате HTML.
Настройка среды
Перед вызовом SQL*Plus потребуется сначала правильно настроить среду Oracle.В частности, необходимо установить значения для таких переменных среды, как ORACLE_SID, ORACLE_HOME и LD_LIBRARY_PATH. Помимо этого иногда нужно установить значения и для таких переменных среды, как NLS_LANG и ORA_NLS11.
В случае не установки правильных значений для необходимых переменных среды будет возникать ошибка. Например, не установка надлежащего значения для переменной ORACLE_HOME перед запуском SQL*Plus будет приводить к появлению следующей ошибки:
В случае получения показной выше ошибки достаточно установить значение для переменной среды ORACLE_HOME:
4.3 About Listing PL/SQL Definitions
To see the definition of a function or procedure , use the SQL*Plus DESCRIBE command.
Example 4-2 Using the DESCRIBE Command
To create and list the definition of a function called AFUNC, enter
4.2 About Listing a Table Definition
To see the definitions of each column in a given table or view, use the SQL*Plus DESCRIBE command.
DESCRIBE accesses information in the Oracle Database data dictionary. You can also use SQL SELECT commands to access this and other information in the database. See your Oracle Database SQL Language Reference for details.
Example 4-1 Using the DESCRIBE Command
To list the column definitions of the columns in the sample view EMP_DETAILS_VIEW, enter
Программное обеспечение SQL*Plus Instant Client
Для использования SQL*Plus инсталлировать полностью все серверное программное обеспечение Oracle Database вовсе не обязательно. Если нужно взаимодействовать через интерфейс SQL*Plus с базой данных, которая находится на другом сервере,вполне хватит и программного обеспечения SQL*Plus Instant Client. С помощью этого программного обеспечения к любой базе данных Oracle, функционирующей под управлением любой операционной системы, можно подключаться удаленным образом за счет указания ее имени и применения идентификатора сетевого подключения Oracle.Единственным требованием для подключения к удаленной базе данных подобным образом является указание имени удаленной базы данных в файле tnsnames.ora. Именно поэтому для SQL*Plus Instant Client требуется задавать переменную среды ORACLE_HOME.Существует также метод, который не требует применения на клиентском сервере файла tnsnames.ora. Называется он методом простого подключения (easy connect). Ниже приведен пример, показывающий, как с помощью идентификатора простого подключения установить от имени пользователя OE подключение к базе данных testdb, расположенной на сервере myserver:
В этом примере 1521 — это порт, используемый слушателем для получения запросов на установку подключения.
Запуск сеанса SQL*Plus из командной строки
Прежде чем подключаться к сеансу SQL*Plus, необходимо сначала правильно настроить среду и указать, с какой базой данных на сервере должно устанавливаться соединение по умолчанию. Делается это с помощью переменной среды ORACLE_SID.
После указания базы данных, которая должна использоваться по умолчанию (в приведенном примере это orcl) в переменной среды ORACLE_SID, можно получать доступ к SQL*Plus из приглашения командной строки, просто вводя команду sqlplus безо имени пользователя и пароля. SQL*Plus предложит ввести имя пользователя и пароль. В случае предоставления имени пользователя вместе с командой (например: sqlplus salapati),SQL*Plus будет приглашать ввести только пароль. Администратор баз данных должен входить от имени одной из административных учетных записей.
На заметку! На серверах UNIX ввод должен обязательно выполняться в нижнем регистре. В Windows интерфейс не чувствителен к регистру символов. За исключением этой небольшой детали, во всем остальном командный интерфейс SQL*Plus работает одинаково и на платформе Windows, и на всех вариантах платформ UNIX и Linux.
Разумеется, вводить имя пользователя и пароль можно и непосредственно при вызове SQL*Plus, но тогда пароль будет виден другим при его вводе. Ниже приведен пример:
Приглашение SQL (SQL>) означает, что соединение с SQL*Plus инициировано, и можно начинать вводить команды и операторы SQL, PL/SQL и SQL*Plus.
Для того чтобы подключиться к другой базе данных, а не той, что установлена по умолчанию, нужно использовать следующую команду:
Определенные операции, например запуск и завершение работы, разрешено выполнять только в случае подключения к SQL*Plus с привилегиями SYSDBA или SYSOPER. При наличии привилегий SYSDBA (или SYSOPER) подключаться к SQL*Plus можно следующим образом:
Конструкция AS позволяет устанавливать привилегированные подключения пользователям, которым были выданы системные привилегии SYSDBA или SYSOPER.
Если в базе данных была создана учетная запись аутентифицированного пользователя операционной системы (ранее называвшаяся OPS$имя; см. главу 12), устанавливать подключение можно и просто указанием символа косой черты (/), как показано ниже:
Можно также подключаться через метод аутентификации операционной системы, за счет включения владельца программного обеспечения Oracle в группу администраторов баз данных (DBA):
Обратите внимание, что во всех предыдущих примерах имя базы данных при подключении через SLQ*Plus не указывалось. Объясняется это тем, что подключение устанавливалось к принятому по умолчанию экземпляру, т.е. к базе данных, на которую указывает значение переменной среды ORACLE_SID. Указывать имя базы данных при использовании SQL*Plus для подключения к принятой по умолчанию базе данных не обязательно. Для подключения к другой базе данных, доступной по сети, нужно обязательно использовать идентификатор подключения (имя сетевой службы).
На заметку! Имя экземпляра, имя базы данных и имя службы могут как совпадать, так и отличаться.
С теоретической точки зрения, подключаться к базе данных можно с использованием полного синтаксиса идентификатора подключения, как показано в следующем примере, где для подключения к базе данных orcl применяется весь адрес целиком:
Однако за счет использования имени сетевой службы, определенного в сетевом файле tnsnames.ora, можно подключаться к базе данных более простым образом:
Кроме того, для подключения к базе данных можно применять простой метод подключения. Синтаксис простого метода подключения выглядит так:
Например, вот как подключиться с помощью этого метода к базе данных orcl:
Обратите внимание, что в случае применения простого метода подключения сетевой файл (tnsnames.ora) не нужен.
Какой бы из перечисленных методов не использовался, в конечном итоге будет обязательно успешно устанавливаться сеанс SQL*Plus либо с базой данных по умолчанию,либо с той, что была указана в идентификаторе подключения.
Запуск сеанса SQL*Plus без установки подключения к базе данных с помощью параметра /NOLOG
Сеанс SQL*Plus можно также запускать и без установки подключения к базе данных,счет указав вместе с командой sqlplus параметр /NOLOG. В подобном может возникать необходимость, например, при запуске базе данных или просто для использования доступных в SQL*Plus команд для записи или редактирования сценариев. После запуска сеанса SQL*Plus для подключения к базе данных всегда можно применить команду CONNECT.
Ниже приведен пример использования параметра /NOLOG:
Установка подключения с помощью команды CONNECT
В SQL*Plus поддерживается команда CONNECT, которая позволяет после входа в SQL*Plus выполнять подключение от имени другого пользователя. Кроме того, она позволяет после подключения к одной базе данных подключаться к другой базе данных.Ниже приведен пример использования команды CONNECT для выполнения подключения от имени другого пользователя:
Следующий пример демонстрирует, как в SQL*Plus подключаться к другой базе данных за счет предоставления идентификатора подключения в виде части команды CONNECT:
Перед подключением к другой базе данных необходимо проверять, что в файле tnsnames.ora присутствует необходимая информация о подключении к удаленной базе данных.
Команду CONNECT можно использовать в SQL*Plus вместе с синтаксисом / AS SYSDBA и / AS SYSOPER, как показано ниже:
4.5 About Running PL/SQL Blocks
You can also use PL/SQL subprograms (called blocks) to manipulate data in the database. See your Oracle Database PL/SQL Language Reference for information on individual PL/SQL statements.
SQL*Plus treats PL/SQL subprograms in the same manner as SQL commands, except that a semicolon (;) or a blank line does not terminate and execute a block. Terminate PL/SQL subprograms by entering a period (.) by itself on a new line. You can also terminate and execute a PL/SQL subprogram by entering a slash (/) by itself on a new line.
You enter the mode for entering PL/SQL statements when:
You type DECLARE or BEGIN. After you enter PL/SQL mode in this way, type the remainder of your PL/SQL subprogram.
You type a SQL command (such as CREATE PROCEDURE) that creates a stored procedure. After you enter PL/SQL mode in this way, type the stored procedure you want to create.
SQL*Plus stores the subprograms you enter in the SQL buffer. Execute the current subprogram with a RUN or slash (/) command. A semicolon (;) is treated as part of the PL/SQL subprogram and will not execute the command.
SQL*Plus sends the complete PL/SQL subprogram to Oracle Database for processing (as it does SQL commands). See your Oracle Database PL/SQL Language Reference for more information.
You might enter and execute a PL/SQL subprogram as follows:
4.5.1 About Creating Stored Procedures
Stored procedures are PL/SQL functions, packages, or procedures. To create stored procedures, you use the following SQL CREATE commands:
Unless stated otherwise, descriptions of commands are applicable to all user interfaces.
In the command-line, type commands at the SQL*Plus prompt and press Return to execute them.
Usually, you separate the words in a command with a space or a tab . You can use additional spaces or tabs between words to make your commands more readable.
Case sensitivity is operating system specific. For the sake of clarity, all table names, column names, and commands in this guide appear in capital letters.
You can enter three kinds of commands :
SQL commands, for working with information in the database
PL/SQL blocks, also for working with information in the database
SQL*Plus commands, for formatting query results, setting options, and editing and storing SQL commands and PL/SQL blocks
The manner in which you continue a command on additional lines, end a command, or execute a command differs depending on the type of command you wish to enter and run. Examples of how to run and execute these types of commands are found on the following pages.
4.1.1 The SQL Buffer
The SQL buffer stores the most recently entered SQL command or PL/SQL block (but not SQL*Plus commands). The command or block remains in the buffer until replaced by the next SQL command or PL/SQL block. You can view the buffer contents with the LIST command.
You can execute the command or block in the SQL buffer using the RUN or /(slash) commands. RUN displays the command or block in the buffer before executing it. /(slash) executes the command or block in the buffer without displaying it first. For information about editing a command or block stored in the buffer see About Editing Scripts in SQL*Plus Command-Line.
SQL*Plus does not store SQL*Plus commands, or the semicolon or slash characters you type to execute a command in the SQL buffer.
4.1.2 About Executing Commands
In command-line SQL*Plus, you type a command and direct SQL*Plus to execute it by pressing the Return key. SQL*Plus processes the command and re-displays the command prompt when ready for another command.
Настройки выполнения скриптов
Действуют на протяжении сессии в SQLplus.
Запомнить настройки перед выполнением скрипта и вернуть обратно по завершении выполнения:
Unless stated otherwise, descriptions of commands are applicable to all user interfaces.
In the command-line, type commands at the SQL*Plus prompt and press Return to execute them.
Usually, you separate the words in a command with a space or a tab . You can use additional spaces or tabs between words to make your commands more readable.
Case sensitivity is operating system specific. For the sake of clarity, all table names, column names, and commands in this guide appear in capital letters.
You can enter three kinds of commands :
SQL commands, for working with information in the database
PL/SQL blocks, also for working with information in the database
SQL*Plus commands, for formatting query results, setting options, and editing and storing SQL commands and PL/SQL blocks
The manner in which you continue a command on additional lines, end a command, or execute a command differs depending on the type of command you wish to enter and run. Examples of how to run and execute these types of commands are found on the following pages.
4.1.1 The SQL Buffer
The SQL buffer stores the most recently entered SQL command or PL/SQL block (but not SQL*Plus commands). The command or block remains in the buffer until replaced by the next SQL command or PL/SQL block. You can view the buffer contents with the LIST command.
You can execute the command or block in the SQL buffer using the RUN or /(slash) commands. RUN displays the command or block in the buffer before executing it. /(slash) executes the command or block in the buffer without displaying it first. For information about editing a command or block stored in the buffer see About Editing Scripts in SQL*Plus Command-Line.
SQL*Plus does not store SQL*Plus commands, or the semicolon or slash characters you type to execute a command in the SQL buffer.
4.1.2 About Executing Commands
In command-line SQL*Plus, you type a command and direct SQL*Plus to execute it by pressing the Return key. SQL*Plus processes the command and re-displays the command prompt when ready for another command.
Команда SPOOL
Команда SPOOL позволяет сохранять вывод одного и более SQL-операторов в файлах операционной системы, как в UNIX, так и в Windows:
По умолчанию создаваемые этой командой буферные (spooled) текстовые файлы сохраняются как имя_файла.lst . Хотя по умолчанию принято сохранять вывод в файле,его также можно отправлять и на принтер. Буферизация файлов является очень полезным приемом при использовании SQL для оказания помощи в написании SQL-сценариев, и некоторые примеры его применения можно найти в приложении.
С помощью команды SPOOL можно добавлять данные в существующий буферный файл, а также полностью заменять его (по умолчанию происходит замена). Ниже приведен весь синтаксис этой команды:
Ниже описаны параметры команды SPOOL .
У команды SPOOL имеет множество способов применения. Например, она легко экспортируется для перехвата результатов оператора SELECT . Перед этим, однако, должен обязательно задаваться формат вывода путем определения значений для переменных HEADING, FEEDBACK и LINESIZE . Ниже приведен пример:
В этом примере файл employees.txt служит для перехвата всех данных из таблицы HR.EMPLOYEES . Далее его можно будет использовать для загрузки данных в другую таблицу с помощью утилиты SQL*Loader.
Запуск сеанса SQL*Plus
Интерфейс SQL*Plus представляет собой утилиту, которая чаще всего применяется для подключения и работы с базами данных Oracle. Он поставляется в составе как серверного программного обеспечения Oracle Database 11g, так и клиентского программного обеспечения Oracle Client, а также нового программного обеспечения Oracle Instant Client.
После установки SQL*Plus на сервере или клиентской машине процесс подключения к серверу или клиенту и запуска сеанса SQL*Plus выглядит очень просто. Из-за того, что каждый сеанс SQL*Plus подразумевает установку соединения с базой данных (если только не применяется параметр /NOLOG), все, что требуется для запуска SQL*Plus и подключения к базе данных — это действительное имя пользователя и пароль.
4.2 About Listing a Table Definition
To see the definitions of each column in a given table or view, use the SQL*Plus DESCRIBE command.
DESCRIBE accesses information in the Oracle Database data dictionary. You can also use SQL SELECT commands to access this and other information in the database. See your Oracle Database SQL Language Reference for details.
Example 4-1 Using the DESCRIBE Command
To list the column definitions of the columns in the sample view EMP_DETAILS_VIEW, enter
Команды ACCEPT и PROMPT
Команда ACCEPT применяется для считывания вводимых пользователем данных с экрана и сохранения их в какой-то переменной. Эту переменную можно либо указать самостоятельно, либо позволить создавать ее SQL*Plus. Обычно команда ACCEPT применяется для считывания данных, вводимых пользователем в ответ на приглашения в интерфейсе SQL*Plus.
Команды ACCEPT и PROMPT в SQL-сценарии обычно используются вместе и служат,как правило, для запроса у пользователя входных данных и сохранения этих данных в переменных для дальнейшей работы с ними в программе. Ниже приведен пример, иллюстрирующий использование этих команд:
Подключение к SQL*Plus через графический интерфейс Windows
В случае использования графического интерфейса SQL*Plus на машине Windows для запуска сеанса SQL*Plus достаточно щелкнуть на пиктограмме SQL*Plus и на экране появится приглашение ввести имя пользователя. При условии, что соединение с базой данных устанавливается через соответствующие сущности в файле tnsnames.ora , после ввода имени пользователя можно приступать к работе с интерфейсом SQL*Plus.
Работать с утилитой SQL*Plus можно как в ручном, так и в сценарном не интерактивном режиме. Само собой разумеется, что уязвимые административные задачи, вроде восстановления базы данных, лучше выполнять в интерактивном режиме. Что же касается рутинных операций по обработке SQL, то их выполнение лучше автоматизировать с помощью сценариев. И в том и в другой случае сами команды будут выглядеть одинаково — отличаться будет лишь режим, в котором они будут выполняться.
Ниже показан синтаксис команды подключения к SQL*Plus:
На заметку! В Oracle Database 11g команда SQLPLUS поддерживает новый аргумент -F, позволяющий SQL*Plus получать от базы данных RAC события FAN (Fast Application Notification — быстрое уведомление приложений).
Подключаться от имени пользователя с привилегиями SYSOPER, SYSDBA или SYSASM необходимо для выполнения привилегированных операций, вроде завершения работы и запуска базы данных или резервного копирования либо восстановления базы данных.Привилегия SYSAM является новой в Oracle Database 11g и предназначена для разделения обычных операций по администрированию баз данных и операций автоматического управления памятью (Automatic Storage Management — ASM).
4.4 Running SQL Commands
The SQL command language enables you to manipulate data in the database. See your Oracle Database SQL Language Reference for information on individual SQL commands.
- At the command prompt, enter the first line of the command:
If you make a mistake, use Backspace to erase it and re-enter. When you are done, press Return to move to the next line.
The semicolon (;) means that this is the end of the command. Press Return or click Execute. SQL*Plus processes the command and displays the results :
After displaying the results and the number of rows retrieved , SQL*Plus command-line displays the command prompt again. If you made a mistake and therefore did not get the results shown, re-enter the command.
The headings may be repeated in your output, depending on the setting of a system variable called PAGESIZE . Sometimes, the result from a query will not fit the available page width. You can use the system variable, LINESIZE, to set the width of the output in characters. See Setting Page Dimensions. Typically, LINESIZE is set to 80 in command-line. Whether you see the message stating the number of records retrieved depends on the setting of the system variable, FEEDBACK. See System Variables that Affect How Commands Run for more information.
Example 4-3 Entering a SQL Command
In this example, you will enter and execute a SQL command to display the employee number, name, job, and salary of each employee in the EMP_DETAILS_VIEW view.
4.4.1 About Understanding SQL Command Syntax
Just as spoken language has syntax rules that govern the way we assemble words into sentences, SQL*Plus has syntax rules that govern how you assemble words into commands. You must follow these rules if you want SQL*Plus to accept and execute your commands.
4.4.1.1 About Dividing a SQL Command into Separate Lines
You can divide your SQL command into separate lines at any points you wish, as long as individual words are not split. Thus, you can enter the query you entered in Example 4-3 on three lines:
In this guide, you will find most SQL commands divided into clauses, one clause on each line. In Example 4-3, for instance, the SELECT and FROM clauses were placed on separate lines. Many people find this clearly visible structure helpful, but you may choose whatever line division makes commands most readable to you.
4.4.1.2 About Ending a SQL Command
You can end a SQL command in one of three ways:
with a semicolon (;)
with a slash (/) on a line by itself
with a blank line
A semicolon (;) tells SQL*Plus that you want to run the command. Type the semicolon at the end of the last line of the command, as shown in Example 4-3, and press Return or click Execute. SQL*Plus processes the command and also stores the command in the SQL buffer. See The SQL Buffer for details. If you mistakenly press Return before typing the semicolon, SQL*Plus prompts you with a line number for the next line of your command. Type the semicolon and press Return again or click Execute to run the command.
A slash (/) on a line by itself also tells SQL*Plus that you wish to run the command. Press Return at the end of the last line of the command. SQL*Plus prompts you with another line number. Type a slash and press Return again or click Execute. SQL*Plus executes the command and stores it in the buffer.
A blank line in a SQL statement or script tells SQL*Plus that you have finished entering the command , but do not want to run it yet. Press Return at the end of the last line of the command. SQL*Plus prompts you with another line number.
You can change the way blank lines appear and behave in SQL statements using the SET SQLBLANKLINES command. For more information about changing blank line behavior, see the SET command.
To execute commands this way, press Return again; SQL*Plus now prompts you with the SQL*Plus command prompt. SQL*Plus does not execute the command, but stores it in the SQL buffer. See The SQL Buffer for details. If you subsequently enter another SQL command, SQL*Plus overwrites the previous command in the buffer.
Команда EXECUTE
При использовании сценариев, которые вызывают PL/SQL-код в форме процедур и пакетов, для фактического запуска отдельных процедур в пакете необходимо применять команду EXECUTE . Ниже приведен пример:
Обратите внимание, что для выполнения процедуры или функции можно специфицировать как ключевое слово EXECUTE , так и ключевое слово EXEC .
Работа с переменными
Переменные могут быть заданы двумя способами:
Если уже была определена &&variable, то значение будет подставлено во все дальнейшие переменные как &variable так и &&variable.
Если была определена &&variable, и скрипт запущен повтороно в ходе той же сессии работы с SQLplus - будет использовано старое значение переменной. Чтобы этого избежать - можно запрашивать интерактивный ввод в скрипте принудительно, испольтзуя команду:
ACCEPT можно использовать для валидации:
Для ввода дат в определенном формате:
SQL*Plus поддерживает четыре типа переменных: CHAR, NUMBER, BINARY_FLOAT, and BINARY_DOUBLE. При вводе с клавиатуры переменная будет типа CHAR.
Несмотря на это, можно использовать NEW_VALUE, чтобы задать числовую переменную, полученную как результат запроса.
Bind-переменные могут использоваться для передачи данных между PL/SQL и SQL блоками:
Присвоить bind-переменной значение &-переменной:
Вывести значение bind-переменной:
Присвоить &-переменной значение bind-переменной:
Получаем OUT-параметр процедуры в bind-переменную:
Условное выполнение в SQLplus:
Пример скрипта, принимающего несколько переменных на вход в формате c возможностью задать дефолтные значения:
4.5 About Running PL/SQL Blocks
You can also use PL/SQL subprograms (called blocks) to manipulate data in the database. See your Oracle Database PL/SQL Language Reference for information on individual PL/SQL statements.
SQL*Plus treats PL/SQL subprograms in the same manner as SQL commands, except that a semicolon (;) or a blank line does not terminate and execute a block. Terminate PL/SQL subprograms by entering a period (.) by itself on a new line. You can also terminate and execute a PL/SQL subprogram by entering a slash (/) by itself on a new line.
You enter the mode for entering PL/SQL statements when:
You type DECLARE or BEGIN. After you enter PL/SQL mode in this way, type the remainder of your PL/SQL subprogram.
You type a SQL command (such as CREATE PROCEDURE) that creates a stored procedure. After you enter PL/SQL mode in this way, type the stored procedure you want to create.
SQL*Plus stores the subprograms you enter in the SQL buffer. Execute the current subprogram with a RUN or slash (/) command. A semicolon (;) is treated as part of the PL/SQL subprogram and will not execute the command.
SQL*Plus sends the complete PL/SQL subprogram to Oracle Database for processing (as it does SQL commands). See your Oracle Database PL/SQL Language Reference for more information.
You might enter and execute a PL/SQL subprogram as follows:
4.5.1 About Creating Stored Procedures
Stored procedures are PL/SQL functions, packages, or procedures. To create stored procedures, you use the following SQL CREATE commands:
Для работы в SQL*Plus, как для выполнения простых команд, так и для разработки сценариев по сбору информации из базы данных, необходимо уметь пользоваться командами SQL*Plus двух основных видов. К первому относятся команды, которые на самом деле что-то делают и потому могут называться рабочими (как, например, RECOVER , которая выполняет восстановление базы данных), а ко второму — команды, которые позволяют получать удобный для прочтения вывод от запросов и потому называются командами форматирования.
В настоящей статье вы ознакомитесь с важнейшими представителями обоих этих видов команд. В частности, в этом разделе рассматриваются команды, которые что-то делают, а в следующем — те, что позволяют форматировать вывод и получать отчеты.
Выполнение SQL запросов
Запрос может состоять из нескольких строк, содержать комментарии, но не может содержать внутри пустые строки.
Запрос может быть выполнен тремя способами:
- точка с запятой в конце запроса
- строка с слешем "/" после запроса
- пустая строка после запроса (будет помещен в буфер, но не выполнен немедленно)
Работа в SQL*Plus
После подключения к интерфейсу SQL*Plus можно начинать вводить в нем любые команды SQL*Plus, SQL или PL/SQL. Как будет объясняться позже в этой главе, операторы SQL оканчиваются либо символом точки с запятой (;), либо символом косой черты (/), а блоки кода PL/SQL — только символом косой черты (/). Вывод можно как просматривать на экране, так и при желании записывать в файл. Команды SQL*Plus всегда оканчиваются символов новой строки. При вводе команды SQL*Plus клиентская программа SQL*Plus анализирует ее, и если та представляет собой оператор SQL или PL/SQL, отправляет ее серверу баз данных для обработки.
В качестве символа продолжения можно использовать дефис (-), хотя при окончании первой строки применять символ продолжения вовсе не обязательно. В каждой строке SQL можно вводить любое количество символов или слов и затем просто нажимать клавишу для продолжения на следующей строке. SQL*Plus будет автоматически добавлять перед каждой строкой ее номер.В некоторых случаях, однако, символ продолжения (-) оказывается полезным, как в следующем примере, где требуется ввести SQL-оператор SELECT 200 - 100 FROM dual:
В этом примере из-за перехода на вторую строку после дефиса (-), который еще так же является и знаком минус, утилита SQL*Plus автоматически интерпретировала его как символ продолжения и выдала ошибку, потому что оператор получился синтаксически некорректным (select 200 100 from dual). Избежать этой проблемы можно за счет использования в конце первой строки второго дефиса (знака минус) для выполнения роли символа продолжения:
В Oracle для выполнения определенных запросов необходимо использовать таблицу DUAL, поскольку в поддерживаемом Oracle синтаксисе SQL наличие конструкции FROM в операторе SELECT является обязательным (например, SELECT sysdate FROM dual;).В базах данных Microsoft SQL Server, с другой стороны, использовать таблицу DUAL не требуется, потому что в синтаксисе SQL Server допускается применение операторов SELECT без конструкции FROM.
4.3 About Listing PL/SQL Definitions
To see the definition of a function or procedure , use the SQL*Plus DESCRIBE command.
Example 4-2 Using the DESCRIBE Command
To create and list the definition of a function called AFUNC, enter
Параметры, подключение к базе, запуск скриптов
Выполнить несколько строк кода (не передавая отдельный файл со скриптом), unix:
Завершение сеанса SQL*Plus
Завершается сеанс SQL*Plus вводом команды EXIT, причем как в нижнем, так и в верхнем регистре. С помощью команды QUIT осуществляется выход в операционную систему (регистр символов тоже роли не играет).
Внимание! В случае выполнения аккуратного выхода из SQL*Plus по команде EXIT (или QUIT) будет немедленно происходить фиксация всех транзакций. Если не нужно, чтобы происходила фиксация транзакций, перед выходом потребуется выполнить команду rollback.
Команда HOST
Команда HOST позволяет выполнять в SQL*Plus команды операционной системы.Например, может возникнуть необходимость посмотреть, существует ли некий файл в определенном каталоге, или выдать команды cp или tar на уровне UNIX , а затем вернуться в сеанс SQL*Plus и возобновить взаимодействие с базой данных Oracle.
Ниже приведен пример применения команды HOST :
В этом примере команда HOST помогает скопировать файл new.sql из указанного каталога в каталог tmp .
С помощью команды HOST можно выполнять практически все те же команды, которые доступны на уровне операционной системы. Слово HOST можно заменять восклицательным знаком (!):
На заметку! В случае ввода команды HOST без параметров вы попадаете в каталог операционной системы, из которого изначально запускали сеанс SQL*Plus.
По завершении работы с операционной системой достаточно ввести в командной строке exit и на экране снова появится приглашение покинутого ранее сеанса SQL*Plus.
Команда DESCRIBE
Команда DESCRIBE описывает или выводит список столбцов таблицы вместе с их спецификациями. Кроме того, она позволяет получать описание процедур или пакетов Oracle. Эта команда чрезвычайно полезна при выполнении рутинных обязанностей администратора баз данных. Если, например, нет уверенности в том, какой столбец нужно выбрать в определенной таблице, но точно известно, к какой именно таблице следует выполнить запрос, с помощью команды DESCRIBE можно получить список всех столбцов, которые имеются в данной таблице. Поскольку команда DESCRIBE может применяться даже в отношении метаданных (словаря данных), с ее помощью можно также очень легко знакомиться с информацией о таблицах и столбцах и их применении, которая является критически важной для работы с базой данных.
В листинге ниже показано, как команда DESCRIBE позволяет отображать столбцы и типы столбцов таблицы.
Команда PAUSE
Часто бывает так, что сценарии при выполнении генерируют вывод, который не умещается на экране. Этот вывод быстро пролетает перед глазами на экране и исчезает до того, как его удается прочитать. Разумеется, можно воспользоваться командой SPOOL для перехвата всего вывода целиком, но делать так постоянно не выгодно, поскольку тогда придется тратить на создание и прочтение файлов с выводом сценариев целый день. Поэтому лучше использовать другую предлагаемую в SQL*Plus команду, а именно — PAUSE , которая позволяет приостанавливаться после отображения каждого целого экрана вывода. Переход к следующему экрану вывода осуществляется просто нажатием клавиши .
Приведенный ниже пример демонстрирует использование команды PAUSE для замедления отображения вывода на экране терминала:
После настройки команды PAUSE вывод больше не будет быстро проскакивать на экране при каждом выполнении SQL-команды. Вместо этого SQL*Plus будет отображать один экран вывода, и ожидать нажатия клавиши . При запуске запросов с командой PAUSE для просмотра первого экрана вывода тоже необходимо нажимать клавишу .
Подключаться и работать с базами данных Oracle можно многими способами.Однако чаще всего для этого применяется предлагаемый в Oracle интерфейс и набор команд SQL*Plus. Интерфейс SQL*Plus, по сути, открывает окно в базу данных Oracle и потому очень широко используется разработчиками Oracle для создания программных единиц SQL и PL/SQL. Для администраторов баз данных Oracle этот интерфейс тоже является очень ценным инструментом по следующим причинам.
- Он позволяет выполнять запросы на языке SQL и блоки кода на языке PL/SQL (который представляет собой предлагаемую в Oracle расширенную процедурную версию языка SQL) и получать результаты.
- Он позволяет выполнять команды, связанные с администрированием баз данных,и автоматизировать их.
- Он позволяет запускать и завершать работу базы данных.
- Он предоставляет удобный способ для создания отчетов по администрированию баз данных.
В этой статье я начинаю рассказывать о том, как использовать SQL*Plus для выполнения типичных задач по администрированию баз данных Oracle, о важных командах SQL*Plus, а также, вкратце, о том, как с помощью SQL*Plus создавать отчеты. Возможно, применять интерфейс SQL*Plus для создания большинства отчетов и не придется, но знать,как работают его многочисленные средства для генерации отчетов, совершенно не помешает.
Выполнение PL/SQL блоков
Пример PL/SQL блока:
Правила выполнения PL/SQL блоков:
- Первое слово в PL/SQL блоке должно быть из списка: BEGIN, DECLARE, CREATE PROCEDURE,
CREATE FUNCTION, CREATE TRIGGER, CREATE PACKAGE, CREATE TYPE, CREATE TYPE BODY. Регистр не важен. - Блок может состоять из нескольких строк
- Можно вставлять /* комментарии */, они также могут быть на несколько строк
- Пустые строки не разрешены внутри блока
Сигнал к выполнению блока может быть подан двумя путями:
- Строка, содержащая только слеш "/" после блока - выполнить сразу
- Строка, содержащая точку "." после блока - поместить в буфер. Содержимое буфера может быть выведено командой LIST и выполнено, путем указания одиночного слеша "/" или команды RUN.
Одиночное выражение PL/SQL может быть выполнено, используя:
В случае ошибок, при выполнении процедуры, можно отобразить их выполнив команду:
Команда SQLPROMPT
Администратору баз данных обычно приходится иметь дело с несколькими базами данных. Из-за этого при выполнении множества задач на протяжении дня очень легко забыть, к какой базе данных подключен тот или иной сеанс SQL*Plus. Поэтому во избежание допущения грубых ошибок (вроде удаления производственных таблиц вместо разрабатываемых или тестируемых), следует всегда настраивать среду так, чтобы имя экземпляра базы данных постоянно отображалось в приглашении, напоминая о том, с какой базой данных происходит взаимодействие.
Для настройки приглашения SQL*Plus так, чтобы в нем отображалось имя базы данных, служит приведенная ниже команда, в которой используется специальная предопределенная переменная _CONNECT_IDENTIFIER (предопределенные переменные подробно рассматриваются в разделе “Предопределенные переменные SQL*Plus” далее в главе):
Обратите внимание, что команда SET приводит к немедленному изменению приглашения в интерфейсе SQL*Plus. После выдачи этой команды приглашение приобретает более значимый вид, ясно указывающий на то, с какой базой данных происходит взаимодействие, и избавляет от необходимости делать по этому поводу какие-либо предположения. В данном примере оно указывает на то, что в текущий момент подключение установлено с базой данных nick .
Для настройки приглашения SQL*Plus можно также использовать и другие специальные предопределенные переменные. Например, с помощью переменной _USER в приглашении отображается имя пользователя:
Применив одновременно переменные _USER и _CONNECT_IDENTIFIER , можно сделать так, чтобы в приглашении отображалось и имя базы данных, и имя текущего пользователя:
Используя переменные _USER и _PRIVILEGE , в приглашении можно отображать не только имя текущего пользователя, но и привилегии, которыми он обладает:
С помощью переменных _USER , _DATE и _CONNECT_IDENTIFIER в приглашении можно отобразить имя пользователя, текущую дату и имя базы данных:
При желании строку, вроде показанной выше, легко добавить в файл login.sql ,чтобы желаемые значения устанавливались автоматически при каждом входе в систему, и их не приходилось настраивать вручную.
4.4 Running SQL Commands
The SQL command language enables you to manipulate data in the database. See your Oracle Database SQL Language Reference for information on individual SQL commands.
- At the command prompt, enter the first line of the command:
If you make a mistake, use Backspace to erase it and re-enter. When you are done, press Return to move to the next line.
The semicolon (;) means that this is the end of the command. Press Return or click Execute. SQL*Plus processes the command and displays the results :
After displaying the results and the number of rows retrieved , SQL*Plus command-line displays the command prompt again. If you made a mistake and therefore did not get the results shown, re-enter the command.
The headings may be repeated in your output, depending on the setting of a system variable called PAGESIZE . Sometimes, the result from a query will not fit the available page width. You can use the system variable, LINESIZE, to set the width of the output in characters. See Setting Page Dimensions. Typically, LINESIZE is set to 80 in command-line. Whether you see the message stating the number of records retrieved depends on the setting of the system variable, FEEDBACK. See System Variables that Affect How Commands Run for more information.
Example 4-3 Entering a SQL Command
In this example, you will enter and execute a SQL command to display the employee number, name, job, and salary of each employee in the EMP_DETAILS_VIEW view.
4.4.1 About Understanding SQL Command Syntax
Just as spoken language has syntax rules that govern the way we assemble words into sentences, SQL*Plus has syntax rules that govern how you assemble words into commands. You must follow these rules if you want SQL*Plus to accept and execute your commands.
4.4.1.1 About Dividing a SQL Command into Separate Lines
You can divide your SQL command into separate lines at any points you wish, as long as individual words are not split. Thus, you can enter the query you entered in Example 4-3 on three lines:
In this guide, you will find most SQL commands divided into clauses, one clause on each line. In Example 4-3, for instance, the SELECT and FROM clauses were placed on separate lines. Many people find this clearly visible structure helpful, but you may choose whatever line division makes commands most readable to you.
4.4.1.2 About Ending a SQL Command
You can end a SQL command in one of three ways:
with a semicolon (;)
with a slash (/) on a line by itself
with a blank line
A semicolon (;) tells SQL*Plus that you want to run the command. Type the semicolon at the end of the last line of the command, as shown in Example 4-3, and press Return or click Execute. SQL*Plus processes the command and also stores the command in the SQL buffer. See The SQL Buffer for details. If you mistakenly press Return before typing the semicolon, SQL*Plus prompts you with a line number for the next line of your command. Type the semicolon and press Return again or click Execute to run the command.
A slash (/) on a line by itself also tells SQL*Plus that you wish to run the command. Press Return at the end of the last line of the command. SQL*Plus prompts you with another line number. Type a slash and press Return again or click Execute. SQL*Plus executes the command and stores it in the buffer.
A blank line in a SQL statement or script tells SQL*Plus that you have finished entering the command , but do not want to run it yet. Press Return at the end of the last line of the command. SQL*Plus prompts you with another line number.
You can change the way blank lines appear and behave in SQL statements using the SET SQLBLANKLINES command. For more information about changing blank line behavior, see the SET command.
To execute commands this way, press Return again; SQL*Plus now prompts you with the SQL*Plus command prompt. SQL*Plus does not execute the command, but stores it in the SQL buffer. See The SQL Buffer for details. If you subsequently enter another SQL command, SQL*Plus overwrites the previous command in the buffer.
Читайте также: