Редактирование в SQL*Plus

Довольно часто требуется вносить незначительные изменения в используемый SQL- код. Пользоваться редактором для внесения таких незначительных изменений вовсе не обязательно, потому что SQL*Plus имеет встроенную команду для внесения изменений, которая называется CHANGE. Для модификации командных строк SQL*Plus применяются простые приемы сопоставления с шаблоном. Поэтому добавлять или изменять слово или часть слова можно просто заменой существующего шаблона в слове новым.

В общем случае, шаблон для изменения SQL-текста выглядит так: C/OLD/NEW, где C представляет собой сокращенный вариант команды CHANGE и позволяет изменять первое вхождение указанного текста в текущей строке, OLD — фактический SQL-текст,который требуется изменить, а NEW — SQL-текст, которым требуется заменить старый текст. В листинге ниже демонстрируется применение технологии сопоставления с шаблоном для осуществления замены текста в сеансе SQL*Plus.


 

SQL> SELECT username,status,process,sid,serial
2 FROM v$session
3* WHERE status = 'ACTIVE';
select username,status,process,sid,serial
*
ERROR at line 1:
ORA-00904: invalid column name
неверное имя столбца
SQL> 1
1* SELECT username,status,process,sid,serial
SQL> c/serial/serial#
1* SELECT username,status,process,sid,serial#
SQL> l
1 SELECT username,status,process,sid,serial#
2 FROM v$session
3* WHERE status = 'ACTIVE'
SQL> /
USERNAME           STATUS PROCESS  SID SERIAL#
----------------- ------- -------  --- --------
                  ACTIVE    2076     1    1
                  ACTIVE    2080     2    1
                  ACTIVE    2084     3    1
                  ACTIVE    2088     4    1
                  ACTIVE    2092     5    1
                  ACTIVE    2096     6    1
SYSTEM            ACTIVE    1856:444 8   58
7 rows selected.
SQL>

В сложных сценариях вносить изменения с применением технологии сопоставления с шаблоном, как показывалось в листинге сверху, может быть неудобно, поэтому в таких ситуациях лучше использовать для этого обычный редактор. После сохранения изменений в редакторе будет снова автоматически появляться интерфейс SQL*Plus, в котором далее можно будет выполнять отредактированный SQL-код.


На заметку! В UNIX обычно используется редактор vi, а в Windows — Notepad (Блокнот). Оба вызываются вводом в командной строке SQL*Plus команды ed.


Вставка и удаление строк

Удаление и добавление строк в SQL-текст можно делать в редакторе. Тем не менее,в SQL*Plus предусмотрены простые способы для добавления и удаления строк. В частности, с помощью команды INPUT можно добавлять одну или более строк в SQL-текст,находящийся в буфере SQL.

Для запуска команды INPUT нужно ввести просто букву i. В листинге ниже показан пример выполнения вставки текста в виде новой строки в конце SQL-сценария. По завершении вставки новых строк можно ввести символ точки (.), и на экране будет снова появляться приглашение SQL*Plus.


На заметку! Символ точки с запятой (;) обычно обозначает конец оператора SQL, а символ точки (.) — конец ввода операторов (это значение по умолчанию переменной BLOCKTERMINATOR).


SQL> SELECT username, status, process, sid, serial#
2 FROM v$session
3* WHERE status = 'ACTIVE'
SQL> i
4 and username = 'HR';
USERNAME   STATUS  PROCESS  SID  SERIAL#
--------- -------  -------- ---- --------
HR         ACTIVE  1856:444  8       64
SQL> 

В листинге ниже показано, как вставить строку в середину SQL-сценария. Сначала понадобится вывести требуемую строку на экран с помощью команды LIST, а затем командой INPUT добавить после нее желаемую новую строку.


SQL> SELECT username, status, process, sid, serial#
2 FROM v$session
3 WHERE status='ACTIVE'
SQL> 1
1* SELECT username, status, process, sid, serial#
SQL> i
2i ,logon_time,terminal
3i .
SQL> l
1 SELECT username, status, process, sid, serial#,
2 logon_time,terminal
3 FROM v$session
4* WHERE status='ACTIVE'
SQL> 

Точно так же можно удалить одну или более строк из буфера из SQL, воспользовавшись командой удаления DEL (или просто D) вместе с номером удаляемой строки, как показано в листинге ниже.


SQL> SELECT username, status, process, sid, serial#
2 FROM v$session
3 WHERE status = 'ACTIVE'
4* AND username='HR'
SQL> del4
SQL> l
1 SELECT username, status, process, sid, serial#
2 FROM v$session
3* WHERE status = 'ACTIVE'
SQL> 

Выполнение команды DEL будет приводить к удалению указанной строки. В случае выдачи команды DEL без номера строки будет удалена последняя строка SQL-текста,хранящегося в буфере.

Добавление слов в текст

Иногда бывает необходимо добавить в определенную строку несколько слова. Вместо того чтобы вызывать редактор, для выполнения этой операции можно также использовать команду APPEND, как показано в листинге ниже.


 

SQL> SELECT username, profile
2 FROM dba_users
3 .
SQL> 1
1* SELECT username, profile
SQL> APPEND , created_date
1* select username, profile, created_date
SQL> l
1 SELECT username, profile, created_date
2* FROM dba_users
SQL>

Внутри одного из операторов может встречаться символ точки с запятой, который будет интерпретироваться SQL*Plus как символ завершения оператора и, следовательно, приводить к появлению ошибки. Например:

SQL> INSERT INTO EMPLOYEES VALUES ('BEGIN
2 LOAD_PROCEDURE);
3* END'); 

Здесь символ точки с запятой во второй строке не обозначает конец оператора, и потому приводит к возникновению следующей ошибки:

ERROR:
ORA-01756: quoted string not properly terminated
строка в кавычках завершена неправильно 

Символ точки с запятой является значением по умолчанию для переменной SQLTERMINATOR. Следовательно, решить проблему в данном случае можно, отключив использование символа точки запятой в качестве символа конца оператора, т.е. отключив SQLTERMINATOR, как показано ниже:

SET SQLTERMINATOR OFF
SQL> INSERT INTO EMPLOYEES VALUES ('BEGIN
2 LOAD_PROCEDURE);
3* END')
/ 

Обратите внимание, что из-за отмены использования символа точки с запятой в качестве символа конца оператора, для выполнения оператора должен применяться символ косой черты (/). Для обозначения конца оператора можно также использовать переменную BLOCKTERMINATOR, значением по умолчанию которой является символ точки (.).

Добавление комментариев с помощью команды REMARK

Команда REMARK работает довольно просто. Она позволяет вставлять в SQL-сценарии комментарии. Ниже показан пример использования ее сокращенного варианта REM:

SQL> GET user_report.sql
1 REM Этот сценарий выводит имена пользователей и их профили
2 REM Автор: sam alapati
3 REM Дата: 20 июня 2005 г.
4 SELECT username, profile FROM dba_users;
SQL> 

 

Вас заинтересует / Intresting for you:

Использование комментариев в S...
Использование комментариев в S... 1055 просмотров Stas Belkov Tue, 21 Nov 2017, 13:18:46
Создание командных файлов в SQ...
Создание командных файлов в SQ... 3560 просмотров Михаил Tue, 21 Nov 2017, 13:18:46
Задание имен файлов в Oracle S...
Задание имен файлов в Oracle S... 6300 просмотров Александров Попков Tue, 21 Nov 2017, 13:32:50
Команды DEFINE и UNDEFINE
Команды DEFINE и UNDEFINE 3006 просмотров Stas Belkov Tue, 21 Nov 2017, 13:18:46
Войдите чтобы комментировать

VaaPa аватар
VaaPa ответил в теме #8994 20 март 2018 16:59
SQL*Plus кончено достаточно функциональный редактор, но есть намного более удобные средства для написания кода SQL - PL SQL, имхо...