Какой блок pl sql называют анонимным

Московский государственный институт электронной техники

(Технический университет)

Кафедра Интегральной электроники и микросистем

ЛАБОРАТОРНЫЙ ПРАКТИКУМ

ПО КУРСУ:

ОПЕРАЦИОННАЯ СИСТЕМА LINUX

Составил: ассистент каф. ИЭМС Козлов А.В.

Москва, 2007

Лабораторный практикум предназначен в первую очередь для магистров техники и технологии, обучающихся по программе Synopsys первого года обучения по направлению 210100.68, для освоения операционной системы Red Hat Enterprise Linux (RHEL) 4.0. Он также рассчитан для студентов компании FreeScale и всех пользователей, имеющих начальный уровень подготовки Linux или не имеющих его вовсе, и желающих освоить командную среду Linux и основные его приложения, которые требуются пользователю при работе с системами автоматизированного проектирования.

Данный практикум состоит из восьми лабораторных работ, позволяющих эффективно освоить пользователем команды командного интерпретатора, а также постепенно научиться писать файлы – сценария Shell, Gawk, Perl и Tcl. Каждая лабораторная работа включает следующие разделы: название, задание и цель работы; теоретические сведения с контрольными вопросами; пример выполнения лабораторной работы; порядок выполнения лабораторной работы; лабораторное задание и форму отчета по работе. Синтаксис написания команд в командном интерпретаторе совместно с опциями, параметрами, действиями, выражениями и путями к объектам рассчитан на командную среду BASH. В конце лабораторного практикума приведен список литературы.

МОСКОВСКИЙ ГОСУДАРСТВЕННЫЙ ИНСТИТУТ ЭЛЕКТРОННОЙ ТЕХНИКИ (ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ)

ЛАБОРАТОРНАЯ РАБОТА № 1

ПО КУРСУ «ОПЕРАЦИОННАЯ СИСТЕМА LINUX»

Изучение команд командного интерпретатора bash в ос linux

ОПИСАНИЕ СОСТАВИЛ:

КОЗЛОВ А.В.

МОСКВА 2007

Лабораторная работа №1 Изучение команд командного интерпретатора bash в ос Linux

Цель работы : на основе командного интерпретатора BASH освоить навыки работы с командами в операционной системе Red Hat Enterprise Linux 4.0.

Продолжительность работы – 4 ч.

Теоретические сведения

Операционная система Linux изначально разрабатывалась как бесплатная гибкая многофункциональная многопользовательская высокопроизводительная платформа, призванная служить и решать задачи ученых по всему миру. В связи с “научной направленностью” такая платформа изначально не имела расширенного графического интерфейса, который широко применяется при решении домашних задач – компьютерные игры, Интернет, интерактивные программы для связи пользователей, а также при решении офисных задач – работа с системами баз данных, построение графиков и гистограмм. Зачастую работа ученых с операционной системой Linux сводилась просто к обычному взаимодействию пользователя (человек, работающий на ЭВМ) с консолью (терминальное окно на экране монитора с текстовой информацией). Для понимания команд вводимых пользователем в Linux разработаны командные интерпретаторы, которые представляют собой трансляторы команд, понятных человеку, в управляющие сигналы, понятные ядру операционной системы. Основная задача операционной системы заключается в посредничестве при передаче команд от человека к ЭВМ. И, не смотря на то, что сегодня операционная система Linux применяется повсеместно не только в институтах, Design центрах, вычислительных центрах, но также в домашних и офисных целях, консоли (терминальные окна), по-прежнему, широко используются, а многим они кажутся даже более удобными по сравнению с работой мышью и пиктограммами (иконки в Linux) в графической среде.

Командный интерпретатор представляет собой строковый интерактивный интерфейс с приглашением командной строки между пользователем и операционной системой. Пользователь вводит в командной строке команды, командный интерпретатор “принимает” их и посылает в виде инст­рукций в операционную систему для исполнения. Командный интерпретатор позво­ляет не только вводить команды, но и перенаправлять ввод и вывод данных командной строки, а также выполнять операции в фоновом режиме, давая пользователю возможность заниматься в это время другими задачами.

Для Linux было разработано множество командных интерпретаторов: Bourne Again shell (BASH), Public Domain shell (PDKSH), интерпретатор TCSH и Z-shell. Несмотря на то, что BASH является интерпретатором, применяемым по умолчанию, можно использовать любую другую среду. Для удобства работы в повседневном режиме достаточно лишь одного командного ин­терпретатора. В систему Red Hal Linux включены все основные командные интерпретаторы, но в ней командный интерпретатор BASH устанавливается и применяется по умолчанию. Это значит, что в этой операционной системе для работы в командной строке применяется BASH, если не указано иное.

Командная строка. Интерфейс командной строки Linux состоит из одной строки, в которой вводятся команды с опциями и параметрами. В командном интерпретаторе BASH начало командной строки обычно отмечается приглашением в виде знака доллара ($); в других командных интерпретаторах системы Linux может применяться другая форма приглашения. После приглашения пользователь может вводить как одиночную команду, так и команду с опциями и параметрами. Если пользователю не хватает размера командного приглашения, то существует возможность огранить его символом “/”. Набор команды осуществляется с клавиатуры, а ввод с помощью клавиши . Например, для вывода системной даты и системного времени пользователь может воспользоваться командой date .

$ date

Fri Jun 8 15:42:35 MSD 2007

Или, например, для вывода календаря с текущим месяцем используется команда cal .

$ cal

July 2007

Su Mo Tu We Th Fr Sa

1 2 3 4 5 6 7

8 9 10 11 12 13 14

15 16 17 18 19 20 21

22 23 24 25 26 27 28

29 30 31

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

Опция - это предваряемый дефисом одно- или многобуквенный код, который модифицирует тип действия, выполняемого командой. В качестве примера команды с опциями при­ведем команду ls . При использовании без опций эта команда выдает список всех файлов и каталогов, содержащихся в текущем каталоге. Кроме имен файлов с расширениями и без, в этом списке больше ничего нет. Например, при вводе команды ls с опцией - l команда ls выдает построчный вывод информации для каждого файла, а именно его размер, дату и время последнего изменения. В следующем примере пользователь вводит команду ls с опцией - l . Дефис перед опцией обязателен. По нему система Linux отличает опцию от параметра.

$ ls -l

total 28

Опция -а позволяет вывести на экран все файлы текущего каталога, включая так называемые скрытые файлы. Скрытыми часто бывают файлы конфигурации. Имена скрытых файлов всегда начинаются с точки, поэтому их часто называют точенными файлами. В большинстве случаев опции объединяются. При этом перед группой опций ставится один общий дефис. Например, опция -al выдает информацию обо всех фай­лах, содержащихся в текущем каталоге, включая скрытые файлы. Отображается новый файл ttt.

$ ls -al

total 40

Параметр - это слово, которое вводится в командной строке после опций. В командах управления файлами в качестве параметров обычно используются имена файлов. Например, если вам нужна инфор­мация только об одном файле gauss.plx, укажите его имя после опции -l:

$ ls -l gauss.plx

Работа пользователя начинается в среде командного интерпретатора BASH, который загружается по умолчанию. В него заложены специальные возможности редактирования командной строки, которые могут оказаться очень полезными при изучении ОС Linux. Перед выполнением команд их можно корректировать, перемещая курсор по командной строке и вставляя или удаляя символы. Это особенно полезно при работе с очень сложными командами. Исправить ошибку при наборе команды помогут операции редак­тирования. С помощью клавиши |вверх| можно вынести ни экран только что выполненную команду. Затем можно выполнить команду еще раз или, отредактировав ее, выполнить модифи­цированную команду. Эта возможность очень удобна при многократном повторении некоторых операций, например, при редактировании одного и того же файла.

Назначением командным интерпретатора является работа с файлами: создание, копирование, переименование, перемещение, удаление и модификация данных. Даже если пользователь непосредственно не работает с консолью, а использует графические приложения, эти операции с файлами происходят независимо от него.

Создание файлов и каталогов. В Linux файл и каталог являются двумя типами данных, поэтому и создание их осуществляется с помощью разных команд. Для создания каталога (директория, папка) используется зарезервированная в Linux команда mkdir (“make directory” – создать директорию). В следующем примере в текущей директории создадим директорию new. Для этого используем команду mkdir и через пробел название директории new.

$ mkdir new

Директория создана. Однако иногда требуется создать целую вложенную структуру, когда внутри уже созданной папки должна быть еще одна, а внутри ее еще одна и так далее. Для этих целей в составе команды mkdir применяется опция вложений –p. В следующем примере с помощью одной команды происходит создание вложенных папок: сначала папка 1, внутри нее папка 2, а внутри нее папка 3.

$ mkdir -p 1/2/3

Создавать файлы можно как с помощью команд, так и с помощью встроенных и внешних текстовых редакторов Linux, таких как kedit, nedit, gedit и так далее. Однако перечисленные редакторы требуют работы графической оболочки, а значит работу графической системы. При ее отсутствии можно, например, воспользоваться текстовым редактором VIM или аналогами, которым работа графической системы не требуется. Можно также создавать файлы с помощью текстовых файловых менеджеров, таких как, Midnight Commander (команда mc). Пользователю (проектировщику) зачастую требуется в текстовых файлах сохранять текстовую информацию, которая сопровождает процесс расчета интегральной схемы или, например, электрофизических параметров моделируемого полупроводникового прибора. А также требуется обрабатывать (удалять, добавлять, сортировать, разбивать) полученные данные. Такие действия также осуществляются с помощью команд Linux. Одной из наиболее простых команд создания текстового файла является команда cat .

Команда cat не имеет собственного интерфейса, поэтому после ввода команды cat с символом перенаправления (см. ниже) и именем нового файла можно сразу же писать текстовую информацию, переходя от строки к строке с помощью клавиши Enter. Выход из редактора (фильтра) cat осуществляется комбинацией клавиш Ctrl-D. Ниже приведен пример создания файла с помощью команды cat.

$ cat > new _ file

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

$ cat new _ file

Или, например, сохраняя текстовую информацию из консоли при работе команды ls с опцией –a в файл r, можно воспользоваться функцией перенаправления данных (см. ниже) и командой tee с опцией -a.

$ ls -l | tee -a r

Копирование файлов и каталогов. Копирование файлов и каталогов осуществляется с помощью команды cp, после которой через пробел указывается с относительным или абсолютным путями объект копирования, а еще через пробел новое место назначение копии этого объекта. В следующем примере производится копирование файла gauss.plx из текущей директории в поддиректорию 1, которая находится в текущей директории.

$ cp gauss . plx 1

Если Вам позволяют права доступа на объекты Linux (лаб. работа №2) можно также скопировать этот файл пользователю Alex, рабочая директория которого имеет следующий абсолютный путь /home/alex , с помощью следующей команды.

$ cp gauss . plx / home / alex

Если в месте назначения при копировании файла файл с таким именем уже существовал, то он перезапишется. Это может привести к потере нужных данных. Чтобы этого избежать используйте команду cp с опцией –i, при этом Linux всякий раз будет спрашивать пользователя, действительно ли он хочет перезаписать файл. Новый вид последней команды выглядит следующим образом.

$ cp -i gauss.plx /home/alex

Копирование каталогов осуществляется таким же способом, как и файлов. Однако при копировании каталогов с файлами и подкаталогами в составе команды cp используется опция –R. Находясь в директории /home/antonk/111, скопируем каталог laba2 на уровень выше, т.е. в директорию /home/antonk . Две точки обозначают уровень иерархии на одну ступень выше.

$ cp - R laba 2 ..

Переименование и перемещение файлов и каталогов. Переименование файлов и каталогов осуществляется с помощью команды mv, после которой через пробел указывается объект переименования и еще через пробел новое имя объекта. Переименование каталогов происходит так же, как и файлов. Переименуем файл gauss.plx в новый файл с название gauss2.plx . Если файл с названием, совпадающим с новым названием переименованного файла, уже существует в этой директории, то он перезапишется содержимым переименованного файла. Чтобы этого не допустить, также используйте опцию –i. Кстати, в Linux использование расширений не требуется. Ими пользуются только для ассоциации файлов и исполняемых программ.

$ mv –i gauss.plx gauss2.plx

Удаление файлов и каталогов. Удаление файлов и каталогов в Linux осуществляется с помощью команды rm , где через пробел указываются имена файлов для удаления. !!! Будьте внимательны при работе с этой командой, вы можете удалить нужные данные. По аналогии с командой cp, используйте совместно с командой rm опцию –i. Команда с такой опцией будет запрашивать подтверждение на удаление каждого файла и каталога. В следующем примере удалим файл gauss 2. plx , запрашивая подтверждение на удаление.

rm –i gauss2.plx

Групповые символы. Иногда при работе с командным интерпретатором требуется найти или сопоставить файлы по шаблону. Например, вы знаете только первую букву в имени файла и хотите найти все файлы в рабочей директории, начинающиеся с этой буквы. Или вам известно последовательность нескольких букв в имени или расширении файла и вам надо его найти среди нескольких сотен других файлов. В этом случае вам требуется воспользоваться специальными символами Linux. В командном интерпретаторе используется ряд специальных символов, называе­мых групповыми символами, с помощью которых файлы можно искать, сопоставлять, а также создавать список имен файлов. Этими символами являются звездочка, вопро­сительный знак и квадратные скобки (*, ?, ). Получив частичное имя файла, команд­ный интерпретатор использует эти символы как образец для поиска и формирования cписка имен обнаруженных файлов. Параметр с неполным именем файла заменяется списком совпавших с ним имен файлов. Этот список имен может использоваться как параметр в командах, оперирующих с несколькими файлами (например, ls ). Групповые символы командного интерпретатора перечислены в табл. 1.

Таблица 1. Специальные символы командного интерпретатора

Общие символы

Назначение

Разделение команд в одной командной строке

"команда"

Выполнение команды

Сравнение с классом возможных символов в именах файлов

Обозначение следующего символа как специального. Используется для обозначения управляющих символов

Передача по каналу стандартного вывода одной команды в качестве ввода для другой команды

Выполнение команды в фоновом режиме

Команда работы с перечнем ранее введенных команд

Групповые символы

Результат применения

Устанавливает соответствие с любым набором символов в именах файлов

Устанавливает соответствие с любым отдельным символом в именах файлов

Символы перенаправления

Результат применения

Перенаправляет стандартный вывод в файл или на устройство. При этом, если файл не существует, он создается, если же файл существует, он перезаписывается

Восклицательный знак приводит к перезаписи файла, если он существует. Этот символ отменяет действие опции, которая запрещает пе­резапись существующих файлов

Перенаправляет стандартный ввод из файла или устройства в программу

Перенаправляет стандартный вывод в файл или на устройство, добавляя выводимые данные к концу файла

Символы перенаправления

Результат применения стандартного вывода сообщений об ошибках

Перенаправляет и добавляет стандартный вывод сообщений об ошибках в файл или на устройство

Перенаправляет стандартный вывод сообщений об ошибках на стандартный ввод

Перенаправляет стандартный вывод сообщений об ошибках в файл или на устройство

Перенаправляет по каналу стандартный вывод сообщений об ошибках на вход другой команды

Например, символом “звездочка” (*) можно пользоваться для обращения к файлам, имена которых на­чинаются или заканчиваются определенной комбинацией символов. В примере показано, как использовать символ звездочки (*) в любой комбинации символов.

$ ls

docl doc2 document docs mydoc monday tuesday

Отобразили полный перечень файлов в рабочей директории.

$ ls doc*

docl doc2 document docs

В этом примере было показано, как символом звездочки мы “отфильтровали” имена файлов, которые не начинаются на комбинацию букв “doc”. Выводятся только имена файлов, которые содержат комбинацию “doc”. При этом остальные файлы не удаляются, они просто не отображаются пользователю.

$ ls *day

monday t uesday

Здесь мы вывели имена файлов, которые заканчиваются на комбинацию “day”.

$ ls [ mt ] * d *

monday tuesday

А здесь мы вывели имена файлов, у которых первым символом значится буква “m” или “t”, последующие символы произвольные, далее буква “d” и опять произвольные символы.

Будьте внимательны при использовании звездочки совместно с командой rm – это может привести к потере ваших данных. Следующая команда удаляет все содержимое текущей папки.

rm *

$ ls *day

docl doc2 docs

Вопросительный знак (?) обозначает только один неуказанный символ в именах файлов.

Oracle , так как он интегрирован с сервером базы данных и его код выполняется непосредственно сервером, поэтому программы, написанные на PL/SQL , работают быстро и эффективно. Возможность использовать SQL в блоках PL/SQL - одна из важнейших его характеристик. PL/SQL применяется для доступа к базам данных Oracle из различных сред разработки, одной из которой является Oracle Forms . В этой главе мы ознакомимся с декларативной средой PL/SQL и ее возможностями, научимся создавать блоки и переменные PL/SQL .

Блоки PL/SQL

PL/SQL, как и любой другой процедурный язык программирования, состоит из логически связанных элементов, объединенных в программные единицы, которые называются блоками. Каждый модуль PL/SQL состоит как минимум из одного блока. Блоки PL/SQL могут содержать любое количество подблоков, то есть иметь различный уровень вложенности . Блок как структурная единица логически связанных элементов определяет область их действия, делает код читабельным и простым для понимания. В PL/SQL различают два типа блока:

  • анонимные блоки;
  • именованные блоки.
Анонимные блоки

Анонимные блоки - это блоки, которые не имеют имени. Анонимные блоки не могут быть вызваны другими блоками, так как у них нет имени, на которое можно ссылаться.

Триггеры Oracle Forms и Reports, которые также называются клиентскими триггерами, являются анонимными блоками PL/SQL. Триггеры базы данных и сценарии в SQL*Plus, заключенные в операторские скобки BEGIN и END , также являются анонимными блоками. Ниже приведена структура анонимного блока:

DECLARE <имя переменной > <тип данных><(значение)>; BEGIN < исполняемый оператор>; EXCEPTION < оператор обработки исключения >; END;

  • DECLARE - раздел объявлений. В этом разделе идентифицируются переменные, курсоры и вложенные блоки , на которые имеются ссылки в исполняемом блоке и блоке исключений. Этот раздел необязательный.
  • BEGIN - END - исполняемый раздел. В этом разделе находятся операторы, которые выполняются ядром PL/SQL во время работы вашего приложения. Этот раздел является обязательным.
  • EXCEPTION - раздел исключений. В этом разделе обрабатываются различные исключения, предупреждения и ошибки. Этот раздел необязателен.

Из всех ключевых слов в представленной структуре для анонимного блока ключевые слова BEGIN и END являются обязательными, и между ними должен быть как минимум один исполняемый оператор:

BEGIN Null; END;

Несмотря на то что ключевые слова BEGIN и END обязательны, в Oracle Forms их можно опустить. Так, к примеру, простейший анонимный блок имеет вид:

BEGIN Message ("Hello!"); END;

В Oracle Forms этот анонимный блок можно записать и без ключевых слов BEGIN и END :

Message ("Hello!");

Рассмотрим различные виды анонимных блоков.

  1. Блок с разделом объявлений и исключений:

    DECLARE <имя переменной > <тип данных><(значение)>; BEGIN < исполняемый оператор>; EXCEPTION < оператор обработки исключения >; END;

    BEGIN NULL; EXCEPTION WHEN OTHERS THEN NULL; END;

  2. Вложенный блок - это такой вид блока, когда один блок объявляется в исполняемом разделе другого. В большинстве случаев вложенный блок создается с целью размещения в нем раздела EXCEPTION для обработки исключений. Это очень удобно, так как в случае возникновения исключения программа не завершается с ошибкой, а продолжает функционировать, обработав ошибку. Ниже приведен пример вложенного блока :

    Синтаксис :

    BEGIN < исполняемый оператор >; BEGIN < исполняемый оператор >; EXCEPTION < оператор обработки исключения >; END; EXCEPTION < оператор обработки исключения >; END;

    Практический пример:

    BEGIN NULL; BEGIN NULL; EXCEPTION WHEN OTHERS THEN NULL; END; NULL; EXCEPTION WHEN OTHERS THEN NULL; END;

  3. Вложенный анонимный блок с разделом объявлений и исключений:

    Синтаксис :

    DECLARE <имя переменной > <тип данных><(значение)>; BEGIN < исполняемый оператор >; BEGIN < исполняемый оператор >; EXCEPTION < оператор обработки исключения >; END; EXCEPTION < оператор обработки исключения >; END;

    Практический пример:

    DECLARE x NUMBER(4); BEGIN x:= 1000; BEGIN x:= x + 100; EXCEPTION WHEN OTHERS THEN x:= x + 2; END; x:= x + 10; DBMS_OUTPUT.PUT_LINE(x); EXCEPTION WHEN OTHERS THEN x:= x + 3; END;

Когда вы связываете код PL/SQL с триггером или полем, пользуясь таким инструментальным средством, как Forms Builder, этот код составляет анонимный блок PL/SQL. При этом можно создать полный блок с объявлениями, исполняемыми операторами и разделом обработки исключений или же ограничиться только исполняемыми операторами.

Именованные блоки

Именованные блоки - это блоки, которые имеют имя, например, функция или процедура. Несмотря на то что анонимные блоки используются часто, каждый разработчик пытается оформить свою PL/SQL-программу как именованный блок. Преимущество именованного блока в том, что у него есть имя и на него можно ссылаться из других блоков. Если считать главным отличием между анонимным блоком и именованным отсутствие имени у первого, то тогда в Forms понятие анонимного блока очень размыто. В Oracle Forms , несмотря на то что пользовательский

PROCEDURE [схема.] имя [(параметр [, параметр...])] FUNCTION [схема.] имя [(параметр [, параметр...])] RETURN тип_возвращаемых_данных

Заголовок функции отличается от заголовка процедуры лишь ключевым словом RETURN .

Именованные блоки, так же как и анонимные, могут быть вложенными, причем анонимный блок может быть вложен в именованный блок. Ниже приведен пример такого блока:

PROCEDURE calc_totals IS year_total NUMBER; BEGIN year_total:= 0; /* Начало вложенного блока */ DECLARE month_total NUMBER; BEGIN month_total:= year_total / 12; END set_month_total; /* Конец вложенного блока */ END;

В этом разделе мы ознакомились с понятием блока в PL/SQL, научились определять типы блоков и их структуру. Остается лишь сделать вывод из всего вышеперечисленного: PL/SQL предоставляет разработчику возможность писать удобочитаемый и гибкий код, подходить к написанию программы как к творческому процессу, требующему нестандартного мышления.

1 .. 43 > .. >> Следующая
О Раздел объявлений. Идентифицирует переменные, курсоры и вложенные блоки, на которые имеются ссылки в исполняемом блоке и блоке исключений. Не обязателен.
О Исполняемый раздел. Операторы, которые выполняются ядром PL/SQL во время работы приложения. Обязателен.
О Раздел исключений. Обрабатывает исключения (предупреждения и ошибки). Не обязателен.
Структура блока PL/SQL для процедуры показана на рис. 3.1.
Заголовок
IS ;
Раздел объявлений)
BEGIN..........j
Исполняемый раздел EXCEPTION Й Раздел исключекий |;END;....." " j
Рис. 3.1. Структура блока PL/SQL
Порядок размещения разделов блока соответствует последовательности написания и выполнения программы.
1. Определяются тип блока (процедура, функция, анонимный) и способ его вызова (заголовок).
Структура блока РЦ/SQL
89
2. Объявляются все переменные и другие объекты PL/SQL, используемые в этом блоке (раздел объявлений).
3. Локальные переменные и другие объекты PL/SQL, объявленные выше, применяются для выполнения необходимых действий.
4. Обрабатываются все проблемные ситуации, которые могут возникнуть во время выполнения блока (раздел исключений).
Процедура, содержащая все четыре раздела, показана на рис. 3.2. В действительности все перечисленные разделы блока создаются не сразу, а в несколько этапов. Не ожидайте, что вы достигнете совершенства с первой попытки!
PROCEDURE getjwppy (enamejn 1Я VARCHAR2) ^- Заголовок
IS _
| ~ hi redate DATE; »-|-Раздел объявлении
BEGIN
- Исполняемый раздел
? Раздел исключений
END;
Рис. 3.2. Процедура, которая содержит все четыре раздела
Анонимные блоки
Когда кто-то хочет остаться неизвестным, он не называет своего имени. То же можно сказать и об анонимном блоке PL/SQL, показанном на рис. 3.3: в нем вообще нет раздела заголовка, блок начинается ключевым словом DECLARE (или BEGIN).
- Исполняемый раздел
Рис 3.3. Анонимный блок без разделов объявлений и исключений
Анонимный блок не может быть вызван другим блоком, поскольку не имеет составляющей, с помощью которой к нему можно обратиться. Таким образом, он является чем-то вроде сценария, который предназначен для выполнения операторов PL/SQL, в большинстве случаев включающих вызовы процедур и функций. Поскольку анонимные блоки могут содержать собственные разделы объявлений
90
Глава 3 Основы языка
и исключений, разработчики часто используют их для определения области видимости идентификаторов и области действия обработки исключений в программе большего размера. Эти свойства блока мы подробно рассмотрим в следующих разделах.
Структура анонимного блока
Общий формат анонимного блока PL/SQL таков:
[ DECLARE
... необязательные операторы объявлений... ]
BEGIN
... исполняемые операторы...
[ EXCEPTION
... необязательные операторы обработки исклвчений... ]
END:
Квадратные скобки указывают на необязательную часть синтаксиса. Ключевые слова BEGIN и END являются обязательными, и между ними должен быть как минимум один исполняемый оператор.
Примеры анонимных блоков
Ниже приведены различные сочетания разделов, которые допустимы для блока PL/SQL.
О Анонимный блок BEGIN.. .END без разделов объявлений и исключений:
BEGIN
-- Вывод текущей даты в стандартном формате DBMS DUTPIIT. PUT LINEfSYSDATE):
END:
О Анонимный блок с разделом объявлений, но без раздела исключений:
DECLARE
l_right now DATE:- SYSDATE:
BEGIN
DBMS OUTPUT.PUT_LXNEСT_rlght_now);
END:
О Анонимный блок с разделом объявлений, исполняемым разделом и разделом исключений:
DECLARE
-- Вызов определенной ранее функции для получения даты
-- найма сотрудника по фамилии TEUERSTEIN".
l_hiredate DATE:- employee_pkg,date_of_hire CFEUERSTEIN");
l_right_now DATE SYSDATE; l_old timer EXCEPTION:
BEGIN
IF l_hiredate < ADD_MONTHS (1 r1ght_now. 6)
THEN
RAISE 1 old_t1mer;
ELSE
l_hiredate right_now:
Структура блока PL/SQL
91
END IF;
EXCEPTION
WHEN l_old_timer THEN
DBMS_OUTPUT.PllT LINEt"Y вас нет доступа к информации.");
UHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE["ОШИБКА: " || SQLCODE);
END;
Анонимные блоки выполняют последовательности операторов и затем завершают свою работу, действуя как процедуры. Фактически все анонимные блоки являются анонимными процедурами.
Анонимные блоки в различных средах
Анонимные блоки используются в средах, где код PL/SQL выполняется либо непосредственно, либо как часть некоторой программы этой среды (табл. 3.1). Объект, включающий конкретный блок, обеспечивает его контекст и в ряде случаев - имя программы.
Таблица 3.1. Анонимные блоки в различных средах
Объект, содержащий блок Среда Описание
Клиентский триггер Средства разработки Orade «Чистые» исполняемые операторы в триггерах Forms Builder или Reports Builder, оформленные соответствующим инструментальным средством как анонимные блоки и отправляемые исполнительному ядру PL/5QL (подробнее о триггерах см. в главе 18)
Триггер базы данных Манипуляции данными на уровне таблицы или события базы данных Тело триггера. Хотя у триггера имеется имя, код PL/SQL анонимен (не имеет имени)
Сценарий 5QL*Plus или его эквивалент Программы и пакетно выполняемые сценарии, вызывающие процедуры и/или функции. Кроме того, команда SQL*Plus EXECUTE транслирует свой аргумент в анонимный блок, заключая его в операторы BEGIN и END

Summary : in this tutorial, you will learn about the PL/SQL anonymous block and how to execute it using SQL*Plus and SQL Developer tools.

PL/SQL anonymous block overview

PL/SQL is a block-structured language whose code is organized into blocks. A PL/SQL block consists of three sections: declaration, executable, and exception-handling sections. In a block, the executable section is mandatory while the declaration and exception-handling sections are optional.

A PL/SQL block has a name. A Function or a Procedure is an example of a named block. A named block is saved into the Oracle Database server first and then can be reused.

A block without a name is an anonymous block. An anonymous block is not saved in the Oracle Database server, so it is just for one-time use. PL/SQL anonymous blocks are useful for testing purposes.

The following picture illustrates the PL/SQL block structure:

A PL/SQL block has a declaration section where you declare variables, allocate memory for cursors, and define data types.

2) Executable section

A PL/SQL block has an executable section. An executable section starts with the keyword BEGIN and ends with the keyword END . The executable section must have a least one executable statement, even if it is the which does nothing.

3) Exception-handling section

A PL/SQL block has an exception-handling section that starts with the keyword EXCEPTION . The exception-handling section is where you catch and handle exceptions raised by the code in the execution section.

Note a block itself is an executable statement, therefore you can nest a block within other blocks.

The following example shows a simple PL/SQL anonymous block with one executable section.

BEGIN

DBMS_OUTPUT.put_line("Hello World!" );

END ;

The executable section calls the DMBS_OUTPUT.PUT_LINE procedure to display the “Hello World” message on the screen.

Execute a PL/SQL anonymous block using SQL*Plus

Once you have the code of an anonymous block, you can execute it using SQL*Plus, which is a command-line interface for executing SQL statement and PL/SQL blocks provided by Oracle Database.

The following picture illustrates how to execute a PL/SQL block using SQL*Plus:

First, connect to the Oracle Database server using a username and password.

Second, turn on the server output using the SET SERVEROUTPUT ON command so that the DBMS_OUTPUT.PUT_LINE procedure will display text on the screen.

Third, type the code of the block and enter a forward slash (/) to instruct SQL*Plus to execute the block. Once you type the forward slash (/), SQL*Plus will execute the block and display the Hello World message on the screen as shown in the illustrations.

Execute a PL/SQL anonymous block using SQL Developer

First, connect to the Oracle Database server using Oracle SQL Developer.

Second, create a new SQL file named anonymous-block.sql resided in the C:\plsql directory that will store the PL/SQL code.

Third, enter the PL/SQL code and execute it by clicking the Execute button or pressing the Ctrl-Enter keyboard shortcut.

The next example block has a declaration section.

DECLARE

v_messageVARCHAR2 (255):="Hello World!" ;

BEGIN

DBMS_OUTPUT.PUT_LINE(l_message);

END ;

In the declaration section, we of the type that holds the string "Hello World!" . The DBMS_OUTPUT.PUT_LINE then used this variable, rather than the literal string, for display.

The next anonymous block example adds an exception-handling section which catches ZERO_DIVIDE exception raised in the executable section and displays the error message.

Базовой единицей любой программы, написанной на PL/SQL, является блок. Из блоков состоят все программы PL/SQL, причем блоки могут

идти один за другим (последовательно) либо вкладываться один в другой.

Существуют два различных типа блоков: анонимные блоки и именован­ные. Анонимные блоки обычно создаются динамически и выполняются то­лько один раз. Этот тип блоков, как правило, создается в клиентской программе для вызова подпрограммы, хранящейся в базе данных. Имено­ванные блоки отличаются тем, что они имеют имя. Именованные блоки

могут быть разбиты на категории следующим образом:

Помеченные блоки (labeled block) являются анонимными блоками с мет­кой, которая дает блоку имя. Они создаются обычно динамически и выполняются только один раз. Помеченные блоки используются так же, как и анонимные блоки, но метка позволяет ссылаться на пе­ременные, которые иначе были бы недоступны.

Подпрограммы (subprogram) делятся на процедуры и функции. Они мо­гут храниться в базе данных как автономные объекты, как часть мо­дуля или как методы объектного типа. Подпрограммы обычно не

изменяются после своего создания и выполняются неоднократно. Подпрограммы могут объявляться в других блоках. Независимо от того, где они объявлены, подпрограммы выполняются явно посред­ством вызова процедуры или функции.

Триггеры (triggers) — это именованные блоки, которые ассоциируются с некоторым событием, происходящим в базе данных. Они, как пра­вило, не изменяются после своего создания и выполняются много­кратно неявным образом при наступлении соответствующих событий. Событием, активизирующим триггер, может быть выпол­нение оператора языка манипулирования данными (DML, data ma­nipulation language) над некоторой таблицей базы данных. К операторам DML относятся INSERT (ввести), UPDATE (обновить) и DELETE (удалить). Это может также быть оператор языка опреде­ления данных (DDL, data definition language), такой как CREATE или DROP, или событие базы данных, например запуск или останов.

Ниже приводится анонимный блок PL/SQL, с помощью которого в

таблицу temp_table вводятся две строки, затем они выбираются и отобра­жаются на экране. Пример представлен в виде сеанса SQL*Plus:

внимание

Для выполнения приведенного выше примера, как и большинства других примеров этой книги, необходимо создать несколько таблиц, в том числе таблицу temp_table. Это можно сделать при помощи сценария tables, sql. Имена нужных файлов указываются в начале каждого примера, их также можно найти в файле README. Модуль DBMS_OUTPUT описан в главе 2.

Можно превратить этот блок в хранимую процедуру, если заменить ключевое слово DECLARE ключевыми словами CREATE OR REPLACE PROCEDURE (см. главы 9 и 10). Обратите внимание, что имя процедуры указывается после ключевого слова END.



Есть вопросы?

Сообщить об опечатке

Текст, который будет отправлен нашим редакторам: