Утиліта SQL * Plus. Створення та виконання сценаріев.Часть 1, Інші СУБД, Бази даних, статті

Призначення SQL * Plus


Утиліта SQL * Plus дозволяє виконувати команди SQL і блоки PL / SQL, а також вирішувати ряд інших завдань. За допомогою SQL * Plus можна:



Базові поняття


При роботі з SQL * Plus використовуються наступні базові поняття:






















Команда Команда SQL * Plus або оператор SQL Oracle.
Блок PL / SQL Група взаємопов’язаних операторів PL / SQL, оформлена у вигляді анонімного блоку.
Таблиця Базова одиниця зберігання даних в Oracle.
Запит SQL-оператор SELECT, що вибирає інформацію з однієї або декількох таблиць.
Результати запиту Дані, повернуті запитом.
Звіт Результати запиту, сформатувати за допомогою команд SQL * Plus.

Розширені формули Бекуса-Наура


При описі синтаксису команд SQL * Plus використані розширені формули Бекуса-Наура (БНФ). Розширені БНФ є способом скороченою записи контекстно-вільних граматик. Нетермінальні символи (Визначені поняття, конструкції і команди SQL * Plus) взяті в кутові дужки. Термінальні символи виділені жирним шрифтом. Врахуйте, що команди SQL * Plus не залежать від регістра термінальних символів.


Метасимвол ::= означає “за визначенням є”. Метасимвол / позначає, що дана формула є скороченою записом декількох формул з однаковими лівими частинами і різними ланцюжками в правій частині (тобто можливий один з розділених цим символом варіантів). Пара метасимволів [ ] використовується для позначення того, що знаходиться між ними ланцюжок може міститися, а може і не міститися в правій частині формули. Пара метасимволів { } означає, що міститься між ними ланцюжок може повторюватися нуль або більше разів. Пріоритет метасимвола / вище, ніж у пар [ ] і { }.


Запуск SQL * Plus і вихід з нього


Для запуску утиліти SQL * Plus використовується команда операційної системи, зазвичай – sqlplus. Запуск виконується з командного інтерпретатора або вікна командного рядка.


У версіях для операційних систем Microsoft використовувалися інші імена команди для виклику SQL * Plus, наприклад, sqlplus30. В даний час (починаючи з версії 8.1.5) в цих операційних системах є дві версії цієї утиліти: sqlplus, Що працює у вікні командного рядка, і віконна версія, sqlplusw.


Загальний синтаксис виклику SQL * Plus має вигляд:




sqlplus [<опції>] [<реєстраційна інформація>] [<початковий сценарій>]

де:


<Опції> :: =
H[ELP]
  / -V[ERSION]
  / –M[ARKUP] <Опція розмітки> [-R[ESTRICT] <Рівень> [-S[ILENT]]]
<Опція розмітки> :: =
HTML [<Вкл-викл>] [HEAD <Текст>] [BODY <Текст>] [TABLE <Текст>]
  [ENTMAP <Вкл-викл>] [SPOOL <Вкл-викл>] [PRE[FORMAT] <Вкл-викл>]
<Вкл-викл> :: =
ON / OFF
<Рівень> :: =
1 / 2 / 3
<Реєстраційна інформація> :: =
<Користувач і база даних> [AS <Роль користувача>]
  / /NOLOG
<Користувач і база даних> :: =
<Ім'я користувача> [/<Пароль>] [@<Рядок зв'язку>] / / <Роль користувача> :: =
SYSOPER / SYSDBA
<Початковий сценарій> :: =
@<Ім'я або посилання> [<аргументи сценарію>]
<Ім'я або посилання> :: =
<Назва файлу> [.<Розширення>] /
<Аргументи сценарію> :: =
<Аргумент> {<прогалини> <аргумент>}

Опції командного рядка


Як випливає з синтаксису, при виклику SQL * Plus можна вказати ряд опцій. Вони коротко описані в табл. 1.


Таблиця 1. Опції командного рядка утиліти SQL * Plus.






















Опція  Призначення 
HELP  Видає інформацію про використання та синтаксисі виклику команди sqlplus і завершує роботу.
VERSION  Видає інформацію про версію утиліти SQL * Plus і завершує роботу.
MARKUP  Опція MARKUP дозволяє генерувати повну HTML-сторінку за результатами запиту або сценарію.
RESTRICT  Дозволяє відключити ряд команд, що взаємодіють з операційною системою. Якщо зазначений рівень обмеження 3, сценарій login.sql в поточному каталозі не читається. Стандартний сценарій запуску glogin.sql читається, але обмежені команди в ньому не працюють. Команди, неприпустимі на кожному з рівнів обмеження, представлені нижче в табл. 2.
SILENT  Пригнічує видачу всіх інформаційних повідомлень і запрошень SQL * Plus, включаючи запрошення командного рядка, відлуння команд і початкову інформацію, зазвичай видається при вході в SQL * Plus. Використовується при виклику SQL * Plus з іншої програми, коли його бажано приховати, і спільно з опцією MARKUP при створенні Web-звітів.

Таблиця 2. Команди, відключаються рівнями обмеження.












































Команда  Рівень 1  Рівень 2  Рівень 3 
EDIT  відключена відключена відключена
GET      відключена
HOST, !  відключена відключена відключена
SAVE    відключена відключена
SPOOL    відключена відключена
START, @, @@      відключена
STORE    відключена відключена

Реєстраційна інформація


При запуску SQL * Plus необхідно ввести реєстраційну інформацію. Якщо ця інформація не вказана, але зазначено початковий сценарій, передбачається, що реєстраційна інформація вказана в першому рядку сценарію. Якщо реєстраційна інформація не вказана ані в командному рядку, ні в початковому сценарії, SQL * Plus запросить її.


Якщо вказано ім’я користувача та не вказаний пароль, SQL * Plus запросить тільки пароль. При установці опції SILENT, Запрошення для введення імені користувача і пароля не видаються, введене ім’я користувача відображається, а пароль, як завжди, немає.


Якщо замість імені користувача і пароля вказана коса (/), Передбачається стандартна реєстрація від імені користувача операційної системи (аутентифікація операційною системою). При цьому не можна вказувати рядок зв’язку. Cервер реєструє користувача OPS$ name , Де name – Реєстраційне ім’я поточного користувача операційної системи. Префікс “OPS$“Можна замінити будь-яким іншим за допомогою відповідного параметра ініціалізації сервера (OS_AUTHENT_PREFIX).


Призначення ролі дозволяє отримати привілейоване підключення користувачам, які мають системні привілеї SYSOPER або SYSDBA. Таке привілейоване підключення можна отримати і при запуску з опціями / або /NOLOG. При вказівці ролі користувача в багатьох операційних системах (наприклад, в NT) необхідно взяти всі аргументи команди в лапки:

SQLPLUS “/ AS SYSDBA”
SQLPLUS “SYSTEM/MANAGER AS SYSOPER”

Опція /NOLOG дозволяє запустити утиліту SQL * Plus без реєстрації. Перш, ніж виконувати будь-які SQL-оператори, доведеться виконати команду CONNECT для підключення. Ця опція зазвичай використовується при запуску сценаріїв, явно підключаються до бази даних за допомогою команди CONNECT.


Початковий сценарій


При запуску можна виконати початковий сценарій (файл з командами SQL * Plus, операторами SQL і анонімними PL / SQL-блоками) і передати йому аргументи. Цей файл може знаходитися в локальній файловій системі або (тільки у версії 9.0.1 для Windows) на Web-сервері. Початковий сценарій запускається так само, як якби він був переданий в якості аргументу команді START.


Якщо для початкового сценарію не вказано суфікс в імені файлу, використовується суфікс. заданий командою SET SUFFIX (За умовчанням, .sql).


Використання профілів сайту і користувача


Утиліта SQL * Plus підтримує використання профілю сайту – командного файлу, що створюється адміністратором бази даних і автоматично виконується при реєстрації будь-якого користувача. Цей файл зазвичай називається glogin.sql і знаходиться в каталозі $ORACLE_HOME/sqlplus/admin.



Примітка
Тут і далі $ORACLE_HOME означає початковий каталог, в який встановлено програмне забезпечення Oracle. При вказівці імен файлів і каталогів використовуються угоди ОС UNIX.

Утиліта SQL * Plus підтримує також використання профілю користувача – командного файлу, що виконується автоматично при реєстрації користувача після профілю сайту. Утиліта SQL * Plus шукає файл профілю, login.sql, В поточному каталозі або, якщо не знаходить його там, в каталогах пошуку файлів SQL-сценаріїв, що задаються зазвичай змінної середовища SQLPATH.


У разі невдалої реєстрації (після триразового запиту імені користувача і пароля), утиліта SQL * Plus завершує роботу з кодом повернення, аналогічним одержуваному по команді EXIT FAILURE.


Вихід з SQL * Plus


Для виходу з SQL * Plus необхідно ввести команду EXIT. Буде видана інформація про версію сервера, до якого була підключена утиліта, і про версії SQL * Plus. Потім робота програми завершується і або закривається вікно, або ви отримуєте запрошення командного рядка операційної системи.


Команда EXIT має наступний синтаксис:



<Команда EXIT> :: =
EXIT [<Код повернення>] [<завершення транзакції>]
  QUIT [<Код повернення>] [<завершення транзакції>]
<Код повернення> :: =
SUCCESS / FAILURE / WARNING
/ <Ціле число> / <змінна> / :<Пов'язують мінлива>
<Завершення транзакції> :: =
COMMIT / ROLLBACK

За замовчуванням при виконанні команди EXIT SQL * Plus фіксує поточну транзакцію і завершує роботу з кодом повернення 0 (SUCCESS).


Підключення до стандартної та дистанційної базі даних


Для доступу до даних необхідно спочатку підключитися до бази даних. При запуску SQL * Plus зазвичай відбувається підключення до стандартної базі даних з вказаним ім’ям користувача і паролем. Після запуску та успішної реєстрації можна в будь-який момент підключитися до схеми іншого користувача або до іншої бази даних. Для цього використовується команда CONNECT.


Стандартна база даних конфігурується на рівні операційної системи, шляхом установки змінної середовища або редагування файлу конфігурації Oracle.


Використання команди CONNECT


Команда CONNECT має наступний синтаксис:



<Команда CONNECT> :: =
CONN[ECT] [<Користувач і база даних>] [AS <Роль користувача>]

Інформація про користувача і бази даних, до яких необхідно підключитися, вводиться в тому ж форматі, що й при запуску (див. синтаксис виклику утиліти SQL * Plus вище). При підключенні, як і при запуску, можна вказати роль користувача, від імені якої вона виконується.


Якщо пароль користувача застарів, при підключенні доведеться ввести новий пароль. Якщо ж обліковий запис заблоковано, то видається повідомлення про це і підключення не відбувається, поки адміністратор не розблокує обліковий запис.


У разі якщо підключення по будь-якої причини не вдалося, ви залишаєтеся відключеними від бази даних, про що буде повідомлено. Можна також явно відключитися від схеми поточного користувача за допомогою команди DISCONNECT.


Бази даних на інших комп’ютерах або просто відмінні від стандартної називаються віддаленими. До віддаленої базі даних можна підключитися, якщо для неї сконфігуровані мережеві служби Oracle Net і драйвери мережевих служб віддаленої бази даних і локального клієнта SQL * Plus сумісні.


Формат рядка зв’язку для віддаленої бази даних


До віддаленої базі даних можна підключитися двома способами:



В обох випадках необхідно вказати рядок зв’язку, задану мережеву службу, до якої потрібно підключитися. Формат рядка зв’язку залежить від версії мережевих служб Oracle на машині, з якою виконується підключення. При використанні Net8 зазвичай рядок зв’язку відповідає імені мережевої служби з файлу tnsnames.ora, Що знаходиться (у версіях 8.1.x і вище) в каталозі $ORACLE_HOME/network/admin/.


Нехай у файлі tnsnames.ora є такий запис для мережевої служби Oracle:

TRAINING =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = creator)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = training)
)
)

Тоді для підключення до відповідної бази даних при запуску SQL * Plus необхідно ввести, наприклад, наступну команду у вікні командного рядка операційної системи:

sqlplus scott/tiger@training

Для підключення до відповідної бази даних з SQL * Plus необхідно виконати команду вигляду:

CONNECT scott/tiger@training

Основні команди


Після запуску утиліта SQL * Plus видає запрошення командного рядка (зазвичай, це рядок “SQL> “), Після якого можна вводити команди. Команди складаються з одного або декількох слів, розділених довільною кількістю пробілів і / або символів табуляції. Регістр символів в командах зазвичай не має значення. При натисканні клавіші Enter команда (при виконанні певних умов по її завершенню) виконується. Після виконання команди знову видається запрошення.


Деякі команди, наприклад, блоки PL / SQL, можуть займати кілька рядків. Тоді SQL * Plus видає додаткові запрошення з номером рядка, наприклад, “2> “.


У командному рядку SQL * Plus можна вводити команди трьох видів:



Від виду команди залежить спосіб продовження її на наступному рядку, завершення та виконання.


Виконання команд


Буфер SQL


Останню введену команду (SQL-оператор або блок PL / SQL) SQL * Plus зберігає в області, яка називається буфер SQL. Оператор або блок залишається в цьому буфері поки не буде введений новий. В буфер SQL не потрапляє крапка з комою або коса, завершальна оператор або блок, відповідно. Вміст буфера SQL можна редагувати і виконувати повторно.


Для повторного виконання вмісту буфера SQL використовується команда RUN або коса риска (/). Команда RUN видає вміст буфера в стандартний вихідний потік, а потім виконує. Коса риса викликає просто виконання команди з буфера.


Виконання операторів SQL


Оператор SQL можна завершити трьома способами:



Крапка з комою в кінці рядка означає виконання оператора. Утиліта SQL * Plus виконує оператор і запам’ятовує його в буфері SQL. Цей символ є ознакою завершення команди і після нього не можна вводити коментар.


Коса риса в якості першого і єдиного символу черговий рядка означає, що оператор треба виконати. Утиліта SQL * Plus виконує оператор і запам’ятовує його в буфері SQL.


Порожній рядок в операторі SQL або сценарії SQL * Plus зазвичай означає, що введення команди завершений, але виконувати її поки не треба (це поведінка можна змінити за допомогою команди SQL * Plus SET SQLBLANKLINES). Команда поміщається в буфер SQL і залишається там, поки не буде введена інша команда.


Виконання блоків PL / SQL


Для введення блоків PL / SQL необхідно працювати в режимі PL / SQL. Утиліта SQL * Plus переходить в цей режим, якщо:



Утиліта SQL * Plus обробляє блоки PL / SQL так само, як і оператори SQL, за винятком крапки з комою і порожній рядка. В режимі PL / SQL їх введення не викликає виконання або завершення команди. Щоб завершити і виконати блок PL / SQL, необхідно ввести рядок з єдиним символом – косою рисою (/). Щоб завершити введення блоку і просто помістити його в буфер SQL, не виконуючи, введіть рядок з єдиним символом точка (.).


Виконання команд SQL * Plus


Команди SQL * Plus виконуються відразу і в буфер SQL не потрапляють. Завершувати команди SQL * Plus крапкою з комою можна, але не обов’язково. Більшість команд SQL * Plus можна скорочувати до однієї або кількох перших букв, достатніх для однозначного визначення команди.


Якщо необхідно ввести довгу команду SQL * Plus, її можна перенести на наступний рядок. Для цього в кінці рядка необхідно ввести дефіс () І тільки потім натиснути клавішу Enter. Буде видано запрошення, і введення команди можна буде продовжити.


Точно так же інтерпретується дефіс і в операторах SQL – якщо це останній не пробільний символ в рядку, він не потрапить в буфер і вважається просто ознакою продовження команди на наступному рядку.


Припинення команди по ходу роботи


Для припинення довго виконується команди по ходу роботи, необхідно ввести символ переривання, звичайно, Ctrl+C. При цьому SQL * Plus припинить видачу результатів команди і видасть запрошення.


Припинити таким способом команду, видає результати у файл за допомогою команди SPOOL, не можна. Доведеться припинити роботу утиліти SQL * Plus, в якій була видана команда, засобами операційної системи.


Отримання інформації про час виконання команди


Для збору та видачі даних про обчислювальних ресурсах, використаних для виконання однієї або декількох команд або блоків, призначена команда TIMING. Вона має такий синтаксис:



<Команда TIMING> :: =
TIMI[NG] <Команда таймера>
<Команда таймера> :: =
START [<Ім'я таймера>] / SHOW / STOP

Призначення команд таймера описано в табл. 3.


Таблиця 3. Команди таймера SQL * Plus.
















Команда  Призначення 
START  Запускає таймер і дає йому вказане ім’я. Можна використовувати декілька активних таймерів, запускаючи додаткові за допомогою команди START перш, ніж зупиняти вихідний. Останній запущений таймер стає поточним.
SHOW  Видає ім’я і дані (час роботи) поточного таймера.
STOP  Видає ім’я і дані (час роботи) поточного таймера, а потім зупиняє і видаляє таймер. Якщо активно кілька таймерів, наступний, передостанній за часом запуску, стає поточним.

Команда TIMING без параметрів видає кількість активних таймерів.


Розглянемо приклад використання команди TIMING:

SQL> timing start first
SQL> select * from dept;
DEPTNO DNAME LOC
———- ————– ————-
10 ACCOUNTING NEW YORK
20 RESEARCH DALLAS
30 SALES CHICAGO
40 OPERATIONS BOSTON
SQL> timing show таймер для: first Затрач.время: 00:00:16.74
SQL> timing stop таймер для: first Затрач.время: 00:00:21.20
SQL>

Для видалення всіх таймерів використовується команда CLEAR TIMING.


Можна також автоматично видавати час роботи кожної команди допомогою установки SET AUTOTRACE. Детальніше див далі в розділі “Налаштування середовища SQL * Plus”.


Виконання команд базової операційної системи


З командного рядка SQL * Plus можна виконувати будь-які команди базової операційної системи. Для цього використовується команда HOST, За якою йде командний рядок для операційної системи.


Команду HOST можна скорочувати до перших двох букв. Якщо команда введена без параметрів, відкривається сеанс стандартного командного інтерпретатора операційної системи. У ньому можна виконувати будь-яку кількість команд. Для виходу з командного інтерпретатора UNIX досить виконати команду EXIT або ввести Ctrl+D.


Доступ до команди HOST можна заборонити, запускаючи утиліту SQL * Plus з будь-яким рівнем обмеження.


Отримання оперативної довідки


Утиліта SQL * Plus дозволяє отримати довідкову інформацію по своїм командам, а також основних об’єктів схем.


Команда HELP


Для отримання довідки по командам SQL * Plus використовується команда HELP. Вона може викликатися з одним необов’язковим аргументом. Якщо аргумент не вказано, видається довідка за довідки SQL * Plus. Якщо аргумент зазначений, то видається довідка за всім командам SQL * Plus, що починається з вказаного аргументу. Наприклад, команда HELP EX видає спочатку довідку по команді EXECUTE, А потім – по команді EXIT.


Команда HELP INDEX видає список всіх команд SQL * Plus. Команда HELP TOPICS видає список команд разом з однорядковим описом призначення.


Команда DESCRIBE


Команда DESCRIBE дозволяє отримати опис таблиці або подання, а також специфікацію типу, пакета, функції або процедури:



<Команда DESCRIBE> :: =
DESC[RIBE] [[<Схема>.] <Об'єкт> [@<Рядок зв'язку>]]

Опис таблиці, подання або синоніма містить наступну інформацію:



Наприклад:

SQL> desc emp Ім’я Пусто? Тип
—————————————– ——– ——————–
EMPNO NOT NULL NUMBER(4)
ENAME VARCHAR2(10)
JOB VARCHAR2(9)
MGR NUMBER(4)
HIREDATE DATE
SAL NUMBER(7,2)
COMM NUMBER(7,2)
DEPTNO NUMBER(2)

Команда DESCRIBE дозволяє описувати об’єкти рекурсивно, причому глибина задається командою SET DESCRIBE. Можна також видавати номер рядка і зрушувати ім’я стовпця або атрибута, якщо об’єкт містить кілька об’єктних типів.


Довжину видається рядки опису можна контролювати за допомогою команди SET LINESIZE.


Опис функцій і процедур містить наступну інформацію:



Наприклад:

PROCEDURE sys.subptxt Ім’я Аргументи Тип В / З По-умовч
—————————— ———————– —— ——–
NAME VARCHAR2 IN
SUBNAME VARCHAR2 IN
USR VARCHAR2 IN
TXT VARCHAR2 IN/OUT

Редагування команд


Команди SQL * Plus не потрапляють в буфер, тому редагувати їх можна тільки по ходу введення за допомогою клавіші Backspace.


Утиліта SQL * Plus підтримує кілька команд редагування тексту в буфері. Вони представлені в табл. 4.


Таблиця 4. Команди редагування SQL * Plus.











































Команда  Призначення 
A[PPEND] <Текст> Додає <текст> в кінці рядка.
C[HANGE] /<Стара> [/<Нова> [/]]  Замінює в рядку підрядок <стара> рядком <нова>. Якщо <нова> не вказана, просто видаляє підрядок <стара>.
CL[EAR] BUF[FER Видаляє всі рядки з буфера.
DEL [* Видаляє поточний рядок.
DEL <n> [* / <m> / LAST Видаляє рядок з номером , або з рядка до поточної, до рядка або до останнього рядка, відповідно.
DEL * [<n> / LAST Видаляє з поточного рядка по рядок або до кінця, відповідно.
DEL LAST  Видаляє останній рядок.
ED[IT] [<Ім'я файлу> [.<Розширення>]] Викликає текстовий редактор операційної системи і завантажує в нього буфер або вказаний файл. Якщо редагується буфер, то в поточному каталозі створюється файл afiedt.buf, В якому і знаходиться результат редагування. Завантаження змін в буфер виконується автоматично після виходу з редактора. Стандартний редактор в ОС UNIX задається змінною середовища _EDITOR. За замовчуванням в ОС UNIX використовується редактор ed, А в Windows – Notepad.
I[NPUT] [<Текст>] Вставляє рядок або <текст>, в тому числі, з кількох рядків, в буфер після поточного рядка.
LIST [<n> / * / LAST Видає, відповідно, всі рядки в буфері SQL, рядок з вказаним номером, поточну або останній рядок.
LIST <n> [* / <m> / LAST Видає рядок з номером , все рядка, починаючи з рядка з номером , до поточної, рядки з номером або до кінця буфера, відповідно.
LIST * [<n> / LAST Видає всі рядки з поточного рядка до рядка з номером або до останнього рядка, відповідно.

Розглянемо приклад:

SQL> select ename, salary from emp;
select ename, salary from emp
* помилка в рядку 1: ORA-00904: невірно ім’я стовпця
SQL> c /salary/sal
1* select ename, sal from emp
SQL> i where deptno=30;
SQL> /
ENAME SAL
———- ———-
ALLEN 1600
WARD 1250
MARTIN 1250
BLAKE 2850
TURNER 1500
JAMES 950
6 рядків вибрано.
SQL> list
1 select ename, sal from emp
2* where deptno=30

Форматування результатів запитів


Результати запитів в SQL * Plus можна додатково сформатувати. Утиліта SQL * Plus дозволяє управляти форматом стовпців, кількістю рядків на сторінці і додатковими порожніми рядками, заголовками сторінок і т.д. У наступних розділах детально розглянуті найбільш часто використовувані команди форматування. Їх застосовують, якщо стандартний формат подання стовпців не підходить.


Стандартний формат стовпців


Ширина числових стовпців відповідає максимуму з ширини заголовка стовпця, ширини, заданої за допомогою опції COLUMN FORMAT, Плюс один символ для знака, і ширини, заданої командою SET NUMWIDTH (За замовчуванням, 10 символів). Якщо кількість значущих цифр у числі більше, ніж допускається шириною числового стовпця, утиліта SQL * Plus округлює число.


Для стовпців інших типів ширина стовпця відповідає його ширині в базі даних. Всі ці стовпчики за замовчуванням вирівнюються вліво. Для стовпців типу DATE формат визначається відповідними NLS-параметрами. Якщо вони не задані, передбачається формат A9 (Див. табл. 6).


Команда COLUMN


Команда COLUMN для управління форматом видачі стовпця має наступний синтаксис:



<Команда COLUMN> :: =
COL[UMN] [<Посилання на стовпець> {<опція>}]
<Посилання на стовпець> :: =
<Ім'я стовпця> / <псевдонім> / <вираз>
<Опція> :: =
ALI[AS] <Псевдонім>
  / CLE[AR]
  / ENTMAP [<Вкл. / Вимк.>]
  / FOLD_A[FTER]
  / FOLD_B[EFORE]
  / FOR[MAT] <Формат>
  / HEA[DING] <Текст>
  / JUS[TIFY] <Вирівнювання>
  / LIKE <Вираз> / <псевдонім>
  / NEWL[INE]
  / NEW_V[ALUE] <Змінна>
  / NOPRI[NT]
  / PRI[NT]
  / NUL[L] <Текст>
  / OLD_V[ALUE] <Змінна>
/ <Вкл. / Вимк.>
  / WRA[PPED]
  / WOR[D_WRAPPED]
  / TRU[NCATED]
<Вкл. / Вимк.> :: =
ON / OFF
<Вирівнювання> :: =
L[EFT] / C[ENTER] / C[ENTRE] / R[IGHT]

Призначення опцій форматування стовпця коротко описано в табл. 5.


Таблиця 5. Основні опції команди COLUMN.























































Опція  Призначення 
ALIAS  Присвоює стовпцю вказаний псевдонім. За цим псевдонімом на стовпець можна посилатися в подальшому в командах BREAK, COMPUTE і COLUMN.
CLEAR  Скидає атрибути зазначеного стовпця в стандартні значення.
ENTMAP  Дозволяє включати і відключати форматування значень стовпця для HTML-звіту. Якщо ця опція для стовпця включена, у значеннях будуть замінюватися символи, що мають керуюче значення в HTML (<, >, & і т.д.).
FOLD_AFTER  Вставляє переклад рядка після заголовка стовпця і кожного значення в даному стовпці. Переклад рядки не вставляється, якщо зазначений стовпець – останній в списку вибору.
FOLD_BEFORE  Вставляє переклад рядка перед заголовком стовпця і кожним значенням в даному стовпці. Переклад рядки не вставляється, якщо зазначений стовпець – перший у списку вибору.
FORMAT  Задає формат виведення значень стовпця. Основні елементи формату представлені в табл. 6 нижче.
HEADING  Визначає заголовок стовпця. Якщо ця опція не використовується, як заголовок використовуються початкові символи (до ширини стовпця) імені стовпця або обраного висловлювання. Якщо в тексті є прогалини або символи пунктуації, його необхідно брати в одинарні або подвійні лапки. Замість кожного входження символу HEADSEP (За замовчуванням – “/») В тексті заголовка вставляється переклад рядка.
JUSTIFY  Задає вирівнювання стовпця. За замовчуванням стовпці типу NUMBER вирівнюються вправо, все решта – вліво.
LIKE  Копіює особливості форматування зазначеного стовпця, не задані для поточного стовпця явно.
NEWLINE  Вставляє переклад рядка перед видачею значення стовпця аналогічно FOLD_BEFORE.
NEW_VALUE  Визначає змінну, в якій буде зберігатися значення стовпця. Цю зміну можна використовувати в команді TTITLE в якості елемента верхнього колонтитула. Сам стовпець необхідно при цьому вказати в команді BREAK з дією SKIP PAGE.
NOPRINT
PRINT 
Управляє видачею стовпця. Опція NOPRINT відключає видачу стовпця на екран і в звіт. Опція PRINT відновлює видачу стовпця.
NULL  Задає текст, що видається утилітою SQL * Plus замість порожніх значень у стовпці. За замовчуванням використовується пробіл.
OLD_VALUE  Визначає змінну, в якій буде зберігатися значення стовпця. Цю зміну можна використовувати в команді BTITLE як елемент нижнього колонтитула. Сам стовпець необхідно при цьому вказати в команді BREAK з дією SKIP PAGE.
ON
OFF 
Управляє застосуванням особливостей (атрибутів) форматування стовпця. Значення OFF відключає застосування особливостей форматування, не скасовуючи їх. Значення ON знову включає застосування заданих особливостей форматування.
WRAPPED
WORD_WRAPPED
TRUNCATED 
Задає правила роботи із значеннями, що перевищують ширину стовпця. Допускається перенесення на наступний рядок по кордону стовпця, по межі слова або усікання по межі стовпця.

Таблиця 6. Основні елементи формату опції FORMAT.












































Елемент  Приклад  Опис 
A <ширина>  A20  Цей елемент формату дозволяє змінити стандартну ширину стовпця строкового типу і типу DATE. Якщо значення стовпця не поміщається в задану <ширину>, воно усікається або переноситься, в залежності від відповідних установок.
9  9999  Представляє значущу цифру в числовому значенні. Замість початкових нулів видаються прогалини. Нульове значення представляється цифрою 0.
0  0999  Видає початковий нуль.
$  $999  Видає перед числовим значенням символ долара.
L  9999L  Видає символ локальної грошової одиниці в даній позиції.
.  9999.99  Видає роздільник цілої та дробової частини (десяткову кому) в даній позиції
,  9,999  Видає кому (роздільник розрядів) в даній позиції.
DATE  DATE  Видає числове значення (що представляє дату в юліанському форматі) як дату в форматі MM/DD/YY.
EEEE  9.999EEEE  Видає значення в експоненційному форматі (обов’язково вказувати рівно чотири E).

Розглянемо простий приклад використання команди COLUMN для форматування значень і заголовків стовпців:

SQL> col sal format 9,999.99
SQL> select sal, ename from emp;
SAL ENAME
——— ———-
800.00 SMITH
1,600.00 ALLEN
1,250.00 WARD
2,975.00 JONES
1,250.00 MARTIN
2,850.00 BLAKE
2,450.00 CLARK
3,000.00 SCOTT
5,000.00 KING
1,500.00 TURNER
1,100.00 ADAMS
950.00 JAMES
3,000.00 FORD
1,300.00 MILLER
14 рядків вибрано.
SQL> col sal clear
SQL> col ename heading “Зарплата / товариша”
SQL> a where deptno=30
1* select sal, ename from empwhere deptno=30
SQL> /
select sal, ename from empwhere deptno=30
* помилка в рядку 1: ORA-00933: невірне завершення SQL-пропозиції
SQL> c/where/ where/
1* select sal, ename from emp where deptno=30
SQL> /
Зарплата SAL товариша
———- ———-
1600 ALLEN
1250 WARD
1250 MARTIN
2850 BLAKE
1500 TURNER
950 JAMES
6 рядків вибрано.

Команда COLUMN з єдиним параметром – посиланням на стовпець, видає всі атрибути форматування зазначеного стовпця. Команда COLUMN без параметрів видає всі атрибути форматування для всіх стовпців, для яких вони явно встановлювалися. Продовжуючи попередній приклад:

SQL> col ename
COLUMN ename ON HEADING “Зарплата / товариші” headsep “/”

Команда BREAK


Команда BREAK дозволяє розбити видаються рядка на групи за значенням стовпця, розділяючи групи порожніми рядками, а також керувати видачею дублюються значень і значень, підрахованих за допомогою команди COMPUTE. Вона має такий синтаксис:



<Команда BREAK> :: =
BRE[AK] {ON <Елемент звіту> {<дія>}}
<Елемент звіту> :: =
<Стовпець> / <вираз> / ROW / REPORT
<Дія> :: =
SKI[P] <Кількість рядків> [<дублікати>]
  / SKI[P] PAGE [<Дублікати>]
<Дублікати> :: =
NODUP[LICATES] / DUP[LICATES]

Команда BREAK без параметрів видає свої поточні параметри (параметри розриву). Кожен наступний виклик BREAK з параметрами скасовує попередній. Для скасування параметрів розриву використовується команда CLEAR BREAKS. Призначення опцій команди BREAK описано в табл. 7.


Таблиця 7. Основні варіанти виклику команди BREAK.































Конструкція  Опис 
ON <Стовпець> {<дія>} Задає дії, які виконуються при зміні значення зазначеного стовпця. Стовпець задається по імені або псевдоніма, без уточнення ім’ям об’єкта. Якщо дія не вказано, пригнічується видача повторюваних значень і відзначається місце, де виконується обчислення, задане у відповідній команді COMPUTE.
ON <Вираз> {<дія>} Задає дії, які виконуються при зміні значення виразу зі списку вибору. Вираз треба задавати буквально, як в списку вибору. Якщо дія не вказано, пригнічується видача повторюваних значень і відзначається місце, де виконується обчислення, задане у відповідній команді COMPUTE.
ON ROW <Дія> {<дія>} Задає дії, які виконуються при видачі кожного рядка. Необхідно поставити хоча б одну дію.
ON REPORT {<Дія>} Зазначає місце у звіті, де SQL * Plus виконає обчислення, задане у відповідній команді COMPUTE. Дозволяє видавати сумарні значення.
SKIP <Кількість рядків> Пропускає вказану кількість рядків (вставляє стільки порожніх рядків) перед рядком, в якій відбувається розрив.
SKIP PAGE  Пропускає стільки рядків, скільки задано в якості розміру сторінки (задається за допомогою SET PAGESIZE). Після останнього рядка даних рядка не пропускаються.
NODUPLICATES  Видає прогалини замість значення в стовпці, якщо воно збігається зі значенням в попередньому рядку.
DUPLICATES  Видає значення стовпця в кожному рядку, незалежно від дублювання.

Конструкцію ON <Стовпець> можна задавати в одній команді BREAK кілька разів. При цьому стовпці перевіряються в порядку вказівки. Дії ж виконуються в зворотному порядку, від самого внутрішнього розриву. Якщо при введенні необхідно перенести опції на наступний рядок, вкажіть дефіс () В кінці першого рядка.


Зазвичай команда використовується з операторами SELECT, Що містять конструкцію ORDER BY. Розглянемо приклад (зверніть увагу на порожні рядки):

SQL> break on deptno skip on sal skip 1
SQL> break break on deptno пропустити 1 nodup on sal пропустити 1 nodup
SQL> select deptno, ename, sal from emp order by deptno;
DEPTNO ENAME SAL
———- ———- ———-
10 CLARK 2450
KING 5000
MILLER 1300
20 SMITH 800
ADAMS 1100
FORD 3000
SCOTT
JONES 2975
30 ALLEN 1600
BLAKE 2850
MARTIN 1250
JAMES 950
DEPTNO ENAME SAL
———- ———- ———-
30 TURNER 1500
WARD 1250
14 рядків вибрано.

Команда COMPUTE


Команда COMPUTE дозволяє обчислювати і видавати підсумкові значення. При виклику без параметрів видає всі задані обчислення. Команда COMPUTE має наступний синтаксис:



<Команда COMPUTE> :: =
COMP[UTE] {<Функція> [LAB[EL] <Текст>]}
   OF <Посилання на стовпець> {<посилання на стовпець>}
   ON <Посилання на місце> {<посилання на місце>}
<Посилання на місце> :: =
<Посилання на стовпець> / REPORT / ROW

Функції, які можна використовувати при обчисленні в команді COMPUTE, Представлені в табл. 8.


Таблиця 8. Функції в команді COMPUTE.








































Функція  Призначення  Допустимі типи даних 
AVG  Середнє серед непустих значень Числові
COU[NT] Кількість непустих значень Всі
MIN[IMUM] Мінімальне значення Числові і рядкові
MAX[IMUM] Максимальне значення Числові і рядкові
NUM[BER] Кількість рядків Всі
SUM  Сума непустих значень Числові
STD  Середньоквадратичне відхилення непустих значень Числові
VAR[IANCE] Дисперсія непустих значень Числові

Призначення основних конструкцій команди COMPUTE описано в табл. 9.


Таблиця 9. Основні конструкції команди COMPUTE.
















Конструкція  Опис 
LABEL <Текст> Визначає мітку обчислюваного значення. Якщо ця конструкція не вказана, видається повне ім’я функції (див. табл. 8). Максимальна довжина тексту – 500 символів. Якщо текст містить прогалини і символи пунктуації, його треба брати в одиночні лапки. Мітка вирівнюється вліво і усікається до меншого із значень ширини стовпця або довжини рядка.

Мітка для обчислюваного значення видається в стовпці, по якому виконується BREAK. Щоб мітка не видавалася, необхідно задати опцію NOPRINT в команді COLUMN для цього стовпця.


Якщо обчислення виконуються за ON ROW або ON REPORT, Що обчислюється значення видається в першому стовпці і мітка не видається. Щоб мітка була видана, включіть в список вибори першим фіктивний стовпець.

OF <Посилання на стовпець> Задає стовпці або вирази, функція від якого обчислюється. У конструкції OF можна послатися на вираз в списку вибору, взявши його в подвійні лапки. Ім’я або псевдонім стовпця в лапки брати не треба.
ON <Посилання на місце> Задає подія, яка утиліта SQL * Plus буде вважати місцем для обчислення. При посиланні на стовпець його ім’я не можна уточнювати, – при необхідності треба використовувати псевдоніми. При досягненні місця обчислення (Тобто коли змінюється значення стовпця або вирази, витягується новий рядок або досягається кінець звіту) команда COMPUTE видає обчислене значення і починає обчислення спочатку.

Якщо для одного і того ж стовпця задано кілька команд COMPUTE, Застосовується остання з них.


У конструкції ON можна послатися на вираз в списку вибору, взявши його в подвійні лапки. Ім’я або псевдонім стовпця в лапки брати не треба.


Якщо як події задано ON ROW або ON REPORT, Необхідно, щоб в останній команді BREAK також використовувався критерій розриву ROW або REPORT.


Для видалення всіх визначень COMPUTE використовується команда CLEAR COMPUTES.


Розглянемо простий приклад обчислення підсумкових значень і редагування SQL-операторів в SQL * Plus:

SQL> set pagesize 55
SQL> break on deptno skip 1
SQL> compute avg label “Середня” of sal on deptno
SQL> select deptno, ename, sal
2 from emp
3 order by deptno;
DEPTNO ENAME SAL
———- ———- ———-
10 CLARK 2450
KING 5000
MILLER 1300
********** ———- Середня 2916,66667
20 SMITH 800
ADAMS 1100
FORD 3000
SCOTT 3000
JONES 2975
********** ———- Середня 2175
30 ALLEN 1600
BLAKE 2850
MARTIN 1250
JAMES 950
TURNER 1500
WARD 1250
********** ———- Середня 1566,66667
14 рядків вибрано.
SQL> compute sum of sal on report
SQL> /

той же результат, оскільки не змінили умова BREAK
SQL> break on deptno skip 1 on report
SQL> list 2
2* from emp
SQL> list *
2* from emp
SQL> i where deptno in (10, 20)
SQL> /
DEPTNO ENAME SAL
———- ———- ———-
10 CLARK 2450
KING 5000
MILLER 1300
********** ———- Середня 2916,66667
20 SMITH 800
ADAMS 1100
FORD 3000
SCOTT 3000
JONES 2975
********** ———- Середня 2175
———-
sum 19625
8 рядків вибрано.

Команда CLEAR


Команда CLEAR дозволяє скинути значення ряду опцій утиліти SQL * Plus, зокрема, пов’язаних з форматуванням результатів. Вона має такий синтаксис:



<Команда CLEAR> :: =
BRE[AKS] / BUFF[ER] / COL[UMNS] / COMP[UTES] / SCR[EEN] / SQL / TIMI[NG]

Призначення опцій команди CLEAR представлено в табл. 10.


Таблиця 10. Опції команди CLEAR.



























Опція  Призначення 
BREAKS  Скидає визначення груп, встановлені командою BREAK.
BUFFER  Очищає буфер SQL. Аналогічно CLEAR SQL, Якщо тільки не використовується декілька буферів (див. SET BUFFER).
COLUMNS  Скидає в стандартні значення атрибути подання даних всіх стовпців, встановлені командами COLUMN.
COMPUTES  Видаляє всі визначення підсумкових функцій, встановлені командою COMPUTE.
SCREEN  Очищує екран SQL * Plus.
SQL  Очищає буфер SQL. Аналогічно CLEAR BUFFER, Якщо тільки не використовується декілька буферів (див. SET BUFFER).
TIMING  Видаляє всі таймери, створені командою TIMING.

Команди BTITLE і TTITLE


Утиліта SQL * Plus дозволяє задавати заголовок для показу в якості верхнього (команда TTITLE) І нижнього (команда BTITLE) Колонтитула на кожній сторінці звіту. Ці команди мають наступний синтаксис:



<Команда BTITLE> :: =
BTI[TLE] [<Специфікації друку> <текст або змінна> {<текст або змінна>}] [<вкл-викл>]
<Команда TTITLE> :: =
TTI[TLE] [<Специфікації друку> <текст або змінна> {<текст або змінна>}] [<вкл-викл>]
<Специфікації друку> :: =
<Специфікація друку> {<специфікація друку>}
<Специфікація друку> :: =
COL <Позиція>
  / S[KIP] [<Кількість рядків>]
  / TAB <Кількість табуляцій>
  / LE[FT]
  / CE[NTER]
  / R[IGHT]
  / BOLD
  / FORMAT <Формат>
<Текст або змінна> :: =
<Текст>
  / SQL.LNO / SQL.PNO / SQL.RELEASE / SQL.SQLCODE / SQL.USER

Текст колонтитулу необхідно брати в одиночні лапки, якщо він складається з декількох слів. При видачі однієї з вбудованих змінних SQL. * Можна вказувати конструкцію FORMAT. Відповідні елементи формату см. в розділі, присвяченому команді COLUMN.


Конструкція <вкл-викл> (ON / OFF) Дозволяє включати і відключати висновок колонтитулів, не впливаючи на їх визначення.


Призначення специфікацій друку команд BTITLE і TTITLE представлено в табл. 11.


Таблиця 11. Специфікації друку в командах BTITLE, TTITLE, REPHEADER і REPFOOTER.
























Специфікація  Призначення 
COL  Вирівнює текст за вказаною символьної позиції.
SKIP  Виводить вказану кількість порожніх рядків. За замовчуванням – одну порожню рядок. Значення 0 означає повернення до початку рядка.
TAB  Пропускає вказану кількість стовпців (позицій табуляції). Якщо вказано від’ємне значення, зміщує поточну позицію на відповідну кількість стовпців вліво.
LEFT
CENTER
RIGHT
 
Задає вирівнювання поточного рядка (ліворуч, по центру, вправо, відповідно). Всі наступні елементи колонтитула (до кінця специфікації або до наступної специфікації LEFT, CENTER, RIGHT або COL) Вирівнюються разом, як група. При цьому використовується довжина рядка, задана за допомогою команди SET LINESIZE.
BOLD  Виділяє дані. На терміналі для цього однакові дані друкуються в трьох послідовних рядках. При виведенні на друк рядок зазвичай видається жирним шрифтом.
FORMAT  Задає модель формату для подальших даних. Допустимі елементи моделі формату см. в табл. 6 вище.

При виклику без параметрів ці команди видають поточний формат і ознака виведення відповідного колонтитула.


Якщо специфікації колонтитула необхідно перенести на наступний рядок, попередня рядок завершується дефісом ().


Розглянемо простий приклад завдання верхнього колонтитула для звіту:

SQL> ttitle left “Список відділів” center “6 грудня 2001 р.” –
> right “Стор.:” format 999 SQL.PNO
SQL> select * from dept;
Список відділів 6 грудня 2001 Стор.: 1
DEPTNO DNAME LOC
———- ————– ————-
10 ACCOUNTING NEW YORK
20 RESEARCH DALLAS
30 SALES CHICAGO
40 OPERATIONS BOSTON

Команди REPHEADER і REPFOOTER


Команди REPHEADER і REPFOOTER дозволяють задати текст, що видається на початку і в кінці кожного звіту, відповідно. При цьому використовуються ті ж специфікації друку, що і в командах BTITLE і TTITLE (Див. табл. 11 вище). Команди мають наступний синтаксис:



<Команда REPHEADER> :: =
REP[HEADER] [PAGE] [<Специфікації друку>
<Текст або змінна> {<текст або змінна>}] [<вкл-викл>]
<Команда REPFOOTER> :: =
REP[FOOTER] [PAGE] [<Специфікації друку>
<Текст або змінна> {<текст або змінна>}] [<вкл-викл>]

Якщо вказана опція PAGE, То відповідний текст видається на окремій сторінці.


При виклику без параметрів ці команди видають поточний формат і ознака виведення тексту на початку та в кінці звіту.


Копіювання даних з однієї бази даних в іншу


Утиліта SQL * Plus пропонує власні засоби копіювання даних з однієї бази даних в іншу і з однієї таблиці в іншу. Для цього використовується команда COPY, Яка дозволяє:



  • копіювати дані з віддаленої бази даних в поточну;
  • копіювати дані з поточної бази даних на віддалену;
  • копіювати дані з однієї віддаленій базі даних в іншу.


Примітка
У загальному випадку, передбачалося копіювання даних між базою даних Oracle і базою даних іншого виробника. У середовищі Oracle для копіювання даних можна використовувати SQL-оператори (CREATE TABLE AS і INSERT).

Команда COPY має наступний синтаксис:



<Команда COPY> :: =
COPY <Напрямок копіювання> <дія копіювання>
<Ім'я цільової таблиці> [(<ім'я стовпця> {, <Ім'я стовпця>})] USING <Запит>
<Напрямок копіювання> :: =
FROM <База даних>
  / TO <База даних>
  / FROM <База даних> TO <База даних>
<База даних> :: =
<Ім'я користувача> [/<Пароль>]@<Рядок зв'язку>
<Дію копіювання> :: =
APPEND / CREATE / INSERT / REPLACE

Вона копіює дані, які повертаються запитом, в таблицю в локальної або віддаленої базі даних. Підтримуються тільки базові типи даних (CHAR, DATE, LONG, NUMBER, VARCHAR2) І в майбутніх версіях (після 9.0.1) підтримка цієї команди не гарантується.


Якщо в конструкції <база даних> пароль не вказано, SQL * Plus запросить його перед виконанням команди.


Дії копіювання описані в табл. 12.


Таблиця 12. Дії копіювання команди COPY.


















Дія  Опис 
APPEND  Вставляє повернуті запитом рядки в цільову таблицю, якщо вона існує. Якщо ж таблиця не існує, вона створюється.
CREATE  Вставляє повернуті запитом рядки в цільову таблицю, попередньо створюючи її. Якщо ж таблиця вже існує, повертається повідомлення про помилку.
INSERT  Вставляє повернуті запитом рядки в цільову таблицю. Якщо таблиця не існує, повертається повідомлення про помилку. У список вибору запиту має входити по одному стовпцю для кожного стовпця цільової таблиці.
REPLACE  Замінює цільову таблицю і її вміст рядками, повернутими запитом. Якщо цільова таблиця не існує, вона створюється. В іншому випадку, існуюча таблиця віддаляється і замість неї створюється нова, містить скопійовані дані.

Копіювати дані можна не у всі стовпці (тоді вони повинні бути сумісні по кількості і типам зі списком вибору запиту), а тільки в зазначені по іменах. Якщо ім’я стовпця містить символи нижнього регістру або пробіли, його необхідно брати в подвійні лапки. Якщо список стовпців не заданий, а цільову таблицю необхідно створювати, то їх імена і типи будуть такими ж, як і у вихідних таблицях.


За замовчуванням, утиліта SQL * Plus виконує фіксацію транзакції після успішного завершення команди COPY. Якщо виконати команду SET COPYCOMMIT n, Де n– Позитивне ціле число, фіксація буде виконуватися після кожного n-Го пакета записів. Розмір пакета задається за допомогою команди SET ARRAYSIZE.


Вся команда COPY повинна поміститися на одному рядку. Якщо необхідно перенести команду на наступний рядок в кінці рядка необхідно ввести дефіс ().


Розглянемо простий приклад копіювання таблиці:

SQL> copy from scott/tiger@training –
> create emp10 –
> using select * from emp where deptno = 10;
Розмір масиву вибірки / прив’язки дорівнює 15. (Arraysize дорівнює 15) Фіксація по завершенні. (Copycommit дорівнює 0) Максимальна довжина дорівнює 80. (Long дорівнює 80) Таблиця EMP10 створена.
3 рядків вибрано з scott @ training. 3 рядків вставлено в EMP10. 3 рядків зафіксовано в EMP10 по з’єднанню DEFAULT HOST.
SQL> set linesize 100
SQL> select * from emp10;
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
———- —— ——— ——- ——– ———- —— ——
7782 CLARK MANAGER 7839 09.06.81 2450 10
7839 KING PRESIDENT 17.11.81 5000 10
7934 MILLER CLERK 7782 23.01.82 1300 10

Схожі статті:


Сподобалася стаття? Ви можете залишити відгук або підписатися на RSS , щоб автоматично отримувати інформацію про нові статтях.

Коментарів поки що немає.

Ваш отзыв

Поділ на параграфи відбувається автоматично, адреса електронної пошти ніколи не буде опублікований, допустимий HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*

*