Довольно часто требуется вносить незначительные изменения в используемый 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>