WWW.DISSERS.RU

БЕСПЛАТНАЯ ЭЛЕКТРОННАЯ БИБЛИОТЕКА

   Добро пожаловать!

Pages:     || 2 | 3 | 4 | 5 |   ...   | 7 |
-- [ Страница 1 ] --

ОФИЦИАЛЬНОЕ АВТОРИЗОВАННОЕ ИЗДАНИЕ ORACLE PRESS™ ЭКСКЛЮЗИВНЫЕ ПРАВА ПРИНАДЛЕЖАТ ИЗДАТЕЛЬСТВУ OSBORNE Программирование на языке PL/SQL Разработка эффективных приложений )мощью PL/SQL OFFICIAL • Oracle

Press О R N Oracle Press™ PL/SQL Programming Scott Urman New York Chicago San Francisco Lisbon London Madrid Mexico City Milan New Delhi Juan Seoul Singapore Sydney Toronto Программирование на языке PL/SQL Скотт Урман Издательство "ЛОРИ" г PL/SQL Programming Scott Copyright 2002 All rights reserved Oracle Программирование на языке PL/SQL Скотт Урман Переводчик О.

Научный редактор А. Головко Корректор Т. Килимник Верстка Л. Федерякиной Copyright © 2002 by The Companies. All rights reserved.

2600 Tenht Street Berkeley, ISBN 0-07-219147-3 © Издательство 2004 Изд. N : (03) ЛР N : 070612 30.09.97 г.

ISBN Подписано в печать 15.09.2004 Формат 70x100/16 Бумага N1 Гарнитура Печать офсетная Печ.л. 34 Тираж 1500 Заказ N Цена договорная Издательство "Лори" 123100, Москва, Шмитовский пр., д. 13/6, стр. Телефон для оптовых покупателей: (095)256-02- Размещение рекламы:

WWW.LORY-PRESS.RU Эта книга посвящена всем моим читателям и пользователям PL/SQL Об авторе Скотт Урман является ведущим специалистом в группе диагностики и вы явления дефектов отдела серверных технологий корпорации Oracle. Сей час основное внимание он уделяет JSP и Oracle Text, а ранее работал с JDBC, PL/SQL и OCI. В прежней своей должности, будучи старшим анали тиком отдела языков в службе технической поддержки Oracle, он занимал ся в основном различными языковыми инструментальными средствами Oracle. Помимо этого, С. Урман — автор бестселлеров PL/SQL Programming" и Advanced PL/SQL Programming".

Благодарности Проект, подобный этой книге, требует для своей реализации много вре мени. Хотелось бы поблагодарить за оказанную мне помощь. В первую очередь хочу сказать спасибо своим техническим рецензентам — Шэрон Кэстэлдайн и Саймону Они участвовали в подготовке последних изданий и без сомнения продолжат свою работу в будущих проектах. Я надеюсь, что мы выявили все технические ошибки. Благодарю также Лизу Лауру Стоун и Скота Роджерса из компании Osborne, контролировавших мою работу и весь проект. И, конечно, спасибо моей семье и друзьям за их замечания, советы и поддержку.

Отзывы об этой книге присылайте электронной почтой по адресу Scott.Urman@oracle.com. Лучшая награда автору — это комментарии и предложения читателей. Я получил множество писем по поводу первых трех изданий и буду рад познакомиться с оценкой моей новой книги.

Oracle — чрезвычайно мощная и гибкая система реляционных баз данных.

Однако, как следствие, она является довольно сложной. Чтобы на основе Oracle разрабатывать полезные приложения, необходимо понимать, ка ким образом Oracle манипулирует хранящимися в системе.

PL/SQL — важное служащее для работы с данными как "внутри" Oracle, так и "вне", т.е. в приложениях пользователя. PL/SQL можно при менять в различных средах самого разнообразного назначения.

В первой из моих книг, посвященных PL/SQL ("Oracle PL/SQL Pro gramming", 1996 г.), был описан язык PL/SQL версии 2.3 для Re lease 7.3, на тот момент это были новейшие версии СУБД и PL/SQL. Во втором издании PL/SQL Programming", 1997 г.) — материал, из ложенный в первой книге, был расширен сведениями об Release 8.0. Третье издание Advanced PL/SQL Programming") было опубликовано в 2000 г. В нем внимание было сосредоточено на новых, развитых возможностях PL/SQL.

Настоящая книга продолжает процесс обновления, в ней рассматрива ются свойства Эта книга и Advanced PL/SQL Program ming" предоставляют полное описание свойств и возможностей языка PL/SQL.

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

Предполагаемая аудитория Книгу можно считать руководством пользователя и справочным пособи ем по PL/SQL. Она полезна всем пользователям, но особенно тем, кто уже работал с PL/SQL раньше. Более сложный материал представлен в главе 12, но я рекомендую предварительно изучить Новые воз можности программирования на языке PL/SQL" (изд. "Лори").

Содержание книги Книга содержит 12 глав и 3 приложения. Главы сгруппированы в три час ти: "Введение и среды разработки", "Базовые свойства PL/SQL" и "Дополни тельные средства PL/SQL".

Введение Часть I. Введение и среды разработки Первая часть книги знакомит с PL/SQL и средами, в которых он выпол няется. Рассматриваются также среды разработки программ на PL/SQL.

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

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

Часть II. Базовые свойства PL/SQL В этой части говорится о реляционных свойствах PL/SQL, включая син таксис языка, типы данных, способы использования SQL, встроенные функции SQL, курсоры, обработку ошибок и сборные конструкции.

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

• Глава 4. Использование SQL в PL/SQL Процедурные конструкции PL/SQL являются частью языка. Только до ступность SQL делает язык по-настоящему мощным и полезным. В этой главе описывается использование запросов SQL и инструкций DML, а также особенности транзакций.

Глава 5. Встроенные функции SQL Язык SQL имеет множество встроенных функций, обеспечивающих до полнительные функциональные возможности.

Глава 6. Курсоры Курсоры применяются для обработки многострочных запросов. Они по зволяют просматривать результирующие наборы данных и обрабатывать каждую по очереди. В этой главе рассматривается синтаксис кур соров и обсуждаются различные доступные типы циклов выборки дан ных. Мы увидим также, как использовать переменные курсоров.

Введение ix Глава 7. Обработка ошибок Программа не может считаться законченной, если она не способна акку ратно обрабатывать ошибки времени выполнения. PL/SQL поддерживает использование исключений (аналогично Java), которые предоставляют определенную инфраструктуру для обработки любой ситуации времени выполнения. В этой главе описывается, как действуют исключения, и по дробно обсуждается семантика распространения исключений.

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

Часть Hi. Дополнительные возможности PL/SQL В третьей части книги рассматривается использование процедур, моду лей, функций и триггеров, а также представлены некоторые более разви тые средства Глава 9. Создание процедур, функций и модулей Подпрограммы (процедуры и функции) — это эффективные средства ор ганизации программного кода PL/SQL в именованные блоки, которые могут храниться в базе данных, а затем вызываться в программах. В этой главе подробно рассматривается синтаксис создания подпрограмм и мо дулей и обсуждается передача параметров.

Глава 10. Использование функций и модулей В главе 10 продолжается обсуждение свойств подпрограмм и модулей. Ис следуются способы их вызова из SQL-операторов и зависимости между ними. Описывается взаимодействие модулей с разделяемым пулом.

Глава Триггеры базы данных Триггеры — это особый вид именованных блоков PL/SQL, исполняемых автоматически при наступлении активизирующего события:

ции, например инструкции INSERT, DDL-инструкции, или системного со бытия. Триггеры могут выполняться также вместо заданной инструкции DDL. В этой главе обсуждаются все типы триггеров.

Глава 12. Дополнительные возможности В этой главе кратко описываются дополнительные возможности PL/SQL: объектные типы, динамический SQL, LOB и канализированные функции. Рассматриваются некоторые из наиболее часто используемых встроенных модулей: DBMS_LOB, DBMS_PIPE, DBMS_SQL и Обсуждаются усовершенствования Введение внесенные в коммуникационные модули UTL_SMTP и Приложения В приложениях приводятся полезные справочные сведения о PL/SQL.

Приложение А. Руководство по работе с встроенными модулями Обсуждаются встроенные модули, доступные в Oracle и значительно рас ширяющие возможности PL/SQL.

Приложение В. Зарезервированные слова PL/SQL Приводится список всех слов, зарезервированных для PL/SQL. Следует избегать использования этих слов при работе с переменными и другими объектами PL/SQL.

Приложение С. Словарь данных Описываются многочисленные представления словаря данных, включая те, что имеют наибольшее отношение к программированию PL/SQL.

Содержание ЧАСТЬ I Введение и среды разработки 1 Введение в PL/SQL Стандарты Блочная структура Обработка ошибок Переменные и типы данных ' Условные операторы Циклические конструкции Курсоры Процедуры и функции Модули Сборные конструкции и версии Oracle Документация Oracle Дополнительное программное обеспечение ГЛАВА 2 Среды разработки и выполнения Двухуровневая модель Трехуровневая модель Соединение с базой данных Rapid SQL SQL Navigator....' TOAD SQL-Programmer PL/SQL Developer Итоги обсуждения инструментальных средств разработки Часть II Базовые свойства PL/SQL 3 Основы PL/SQL Базовая структура блока Идентификаторы Ограничители Литералы Комментарии Синтаксис объявления Инициализация переменных Скалярные типы Составные типы Ссылочные типы Типы LOB Объектные типы Использование Преобразование типов данных Области действия и области видимости переменных Присваивание Выражения CASE.. Содержание Циклы Операторы GOTO и метки Прагмы записей Использование Комментарии Имена переменных Выделение заглавными буквами Структурирование текста Общий стиль ГЛАВА 4 в PL/SQL Использование SQL в PL/SQL Использование динамического SQL SELECT INSERT UPDATE DELETE Условие WHERE Массовое связывание Предложение RETURNING Ссылки на таблицы Связи баз данных Синонимы и LEVEL ' ROWID Объектные и системные привилегии GRANT и REVOKE Роли COMMIT и ROLLBACK Точки сохранения Транзакции и блоки Автономные транзакции ГЛАВА 5 Встроенные функции SQL SUBSTR, SUBSTRB, SUBSTRC, SUBSTR2 и SUBSTR4 SOUNDEX INSTRB, INSTRC, и INSTR4 LENGTH, LENGTHC, LENGTH2 и LENGTH4 с датами и временем ТО CHAR (дата и дата-время) TO~CHAR (число) ТО DATE ТО NUMBER ТО DUMP ISERENV ГЛАВА 6 Курсоры Обработка явных курсоров Обработка неявных курсоров Содержание Простые циклы Циклы WHILE Курсорные циклы FOR NO DATA FOUND и Курсоры SELECT FOR UPDATE Объявление курсорной переменной Выделение памяти под курсорные переменные Открытие курсорной переменной для запроса Закрытие курсорных переменных Пример использования курсорных переменных Второй пример курсорной переменной Ограничения на использование курсорных переменных ГЛАВА 7 Обработка ошибок. Объявление исключительных ситуаций Инициирование исключительных ситуаций Обработка исключительных ситуаций Прагма EXCEPTION INIT Использование функции RAISE_APPLICATION_ERROR Исключительные ситуации, возникающие в выполняемом разделе Исключительные ситуации, порождаемые в разделе объявлений Исключительные ситуации, порождаемые в разделе исключительных Область действия исключительной ситуации Отслеживание всех исключительных ситуаций Выявление места возникновения ошибки ГЛАВА 8 Сборные конструкции Индексные таблицы Вложенные таблицы Изменяемые массивы Многоуровневые сборные конструкции Сравнение типов сборных конструкций Особенности хранимых сборных конструкций Манипуляции со сборными конструкциями Работа с отдельными элементами сборных конструкций EXISTS COUNT LIMIT FIRST и LAST NEXT и PRIOR EXTEND TRIM DELETE Часть III Дополнительные возможности PL/SQL ГЛАВА 9 Создание процедур, функций и модулей Создание подпрограмм Параметры Оператор CALL. Процедуры и функции Описание модуля Содержание Тело модуля Модули и область действия Перегрузка модульных подпрограмм Инициализация модуля ГЛАВА 10 Использование процедур, функций и модулей Хранимые подпрограммы и словарь данных Локальные подпрограммы Сравнение хранимых и локальных подпрограмм Зависимости в подпрограммах Состояние модулей на этапе выполнения Привилегии и хранимые подпрограммы Уровни строгости Параметры по умолчанию KEEP UNKEEP SIZES ГЛАВА Триггеры базы данных Создание триггеров Создание замещающих триггеров Создание системных триггеров Другие аспекты использования триггеров Триггеры и словарь данных Пример изменяющейся таблицы Как избежать ошибок, связанных с изменяющимися таблицами.. ГЛАВА 12 Дополнительные возможности Внешние подпрограммы Встроенный динамический SQL Массовые соединения Объектные типы Большие объекты Канализированные табличные функции DBMS SQL DBMS PIPE DBMS ALERT UTL TCP UTL SMTP UTL HTTP UTL INADDR DBMS JOB Часть IV Приложения ПРИЛОЖЕНИЕ А Руководство по работе со встроенными модулями.. DBMS ALERT DBMS APPLICATION INFO DBMS AQ DBMS AQADM DMBS AQELM DBMS BACKUP RESTORE.. Содержание DBMS DDL DBMS DEBUG DBMS DEFER DBMS DEFER QUERY DBMS DEFER SYS DBMS DBMS DISTRIBUTED DBMS FGA DBMS FLASHBACK DBMS HS DBMS HS PASSTHROUGH DBMS JOB DBMS DBMS DBMS LOCK DBMS LOGMNR CDC PUBLISH DBMS LOGMNR CDC DBMS LOGMNR_D DBMS METADATA (DBMS SNAPSHOT) DBMS OG DBMS OFFLINE SNAPSHOT DBMS DBMS ORACLE TRACE AGENT DBMS ORACLE TRACE USER DBMS EDIT DBMS DBMS DBMS PIPE DBMS DBMS REFRESH DBMS DBMS REPCAT, DBMS REPCAT ADMIN, DBMS REPCAT INSTANTIATE, DBMS REPCAT DBMS RESOURCE MANAGER и DBMS RESOURCE MANAGER DBMS RESUMABLE DBMS_SESSION DBMS SHARED POOL DBMS SPACE и DBMS SPACE ADMIN SQL Содержание DBMS STANDARD и STANDARD DBMS TRACE DBMS TRANSACTION DBMS : DBMS UTILITY DBMS WM DBMS XMLSAVE и XMLGEN DEBUG 7 SDO SDO SDE LRS, SDO MIGRATE и SDO TUNE COLL " " ' UTL FILE UTL HTTP UTL_REF UTL TCP ПРИЛОЖЕНИЕ В Зарезервированные слова PL/SQL ПРИЛОЖЕНИЕ С Словарь данных Соглашения по именованию Полномочия Типы представлений Реляционные кластеры, таблицы и представления Сборные конструкции, объекты LOB, объектные типы и таблицы Представления Другие объекты базы данных Разделы и подразделы, Материализованные представления, итоги и моментальные снимки Подпрограммы, методы и триггеры Исходный программный код и ошибки компиляции Зависимости и ограничения Статистика и аудит Привилегии и среды ГЛАВА Введение в PL/SQL — это развитый язык программирования, используемый для доступа к базам данных Oracle из различных сред. PL/SQL интегрирован с сервером базы данных, поэтому программы PL/SQL обрабатываются быстро и эффективно. Этот язык доступен и в некоторых клиентских ин струментальных средствах Oracle. В данной главе рассматриваются преи мущества использования PL/SQL и его основные свойства, а также различные версии этого языка и систем баз данных. Представлены кон цепции PL/SQL, подробный анализ которых пойдет в других главах кни ги. Глава завершается описанием соглашений и таблиц базы данных, применяемых в примерах.

Преимущества PL/SQL Oracle — это реляционная база данных. Язык программирования, исполь зуемый для доступа к реляционным базам данных, называется языком структурированных запросов (SQL, Structured Query Language;

часто произ носится как SQL — гибкий и эффективный язык, все средства которого служат для манипулирования реляционными данными и для их исследования. Например, с помощью SQL-оператора можно удалить из базы данных сведения обо всех студентах (students), профилирующей дисциплиной (major) которых является питание (nutrition):

DELETE FROM students WHERE major = (Таблицы, используемые в этой книге, в том числе и таблица students, описаны в конце данной главы.) SQL является языком четвертого поколения. Это что он описы вает то, что нужно выполнить, а не то, как это должно быть сделано. В приведенном операторе DELETE (удалить) неизвестно, как база данных найдет студентов, специализирующихся по питанию. Чтобы узнать, ка кие записи необходимо удалить, сервер, скорее всего, просмотрит сведе ния обо всех студентах, однако реальную картину этой операции пользователи не видят.

Языки поколения, например С и COBOL, по природе своей бо лее процедурны. Программа, составленная на языке третьего поколения (3GL, third — generation language), реализует пошаговый алгоритм реше ния проблемы. Например, можно выполнить операцию DELETE пример но таким образом:

Г) LOOP (циклически просмотреть) запись о каждом студенте IF (если) для этой записи major = THEN (тогда) DELETE (удалить) эту запись;

END IF (конец если);

END LOOP (конец Введение в PL/SQL Объектно-ориентированные языки программирования, такие как C++ и Java, также являются языками третьего поколения. Хотя в них реализу ются принципы объектно-ориентированного программирования, алго ритмы все еще остаются пошаговыми.

У каждого типа языка программирования есть свои достоинства и статки. Языки четвертого поколения, подобные SQL, как правило, проще (по сравнению с языками третьего поколения) и содержат меньшее число команд. Кроме того, они изолируют пользователя от базовых структур дан ных и алгоритмов, реализуемых исполняющей системой. Однако в некото рых случаях процедурные конструкции языков 3GL полезны для более точного описания программы. Именно для этого применяется PL/SQL, который объединяет мощь и гибкость SQL (языка 4GL) и процедурные конструкции языка PL/SQL означает Procedural Language/SQL (процедурный язык/SQL).

Как видно из названия, PL/SQL расширяет возможности SQL, добавляя в него такие конструкции процедурных языков, как:

• Переменные и типы данных (как предварительно определенные, так и определяемые пользователями) • Управляющие такие как условные операторы и циклы • Процедуры и функции • Объектные типы и методы и выше) Процедурные конструкции объединяются с Oracle SQL, что дает в ре зультате структурированный и эффективный язык программирования.

Предположим, что требуется изменить профилирующую дисциплину не коего студента. Если записи о нем нет, нужно создать новую запись. Это можно сделать при помощи следующего кода PL/SQL:

Г) ••- Этот пример содержится в файле 3gl_4gl.sql DECLARE /* Обьявим переменные, которые будут использоваться в */ VARCHAR2(10) := := := BEGIN /* Обновим таблицу */ UPDATE students SET = WHERE first_name = v_FirstName AND = v_LastName;

Проверим, найдена ли Если нет, нужно ее ввести. */ IF THEN INSERT INTO students (ID, major) VALUES END IF;

END;

В этом примере содержатся два разных SQL-оператора (UPDATE (об новить) и INSERT а также (операторы объяв ления переменных и условный оператор IF).

Внимание Для того чтобы выполнить приведенный пример, необходимо вначале создать объекты базы данных, на которые производятся ссылки (таблицу students и последовательность Это можно сделать при помощи сценария находящегося на сайте издательства "Лори" по адресу: ru. Более подробно о создании объектов и о поставляемых текстах программ рассказывается ниже в разделе "Расположение примеров".

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

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

Сервер Сервер базы данных Oracle базы данных Oracle SQL SQL SQL Приложение клиента Приложение клиента Использование SQL Использование Рис. 1.1. PL/SQL в среде клиент/сервер Введение в PL/SQL Запросы формируются при помощи SQL, что создает в сети большое число пересылок, по одной на каждый SQL-оператор (см. левую схему на рис. 1.1). Однако несколько SQL-операторов можно объединить в один блок PL/SQL и послать их серверу как единое целое (см. правую схему на рис. 1.1). В результате сетевой трафик снижается, и приложение функционирует намного быстрее.

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

Пакетирование PL/SQL полезно и при использовании трехуровневой модели. В этом случае клиент (который обычно работает в ре) взаимодействует с сервером приложений, который в свою очередь взаимодействует с базой данных. Именно на последнем отрезке этой цепи полезно применение пакетов PL/SQL (см. главу 2).

Стандарты Oracle поддерживает стандарт ANSI (American National Standards Institu te — Американский национальный институт стандартов) для языка SQL, как определено документом 9075-1:1999 "Database Langua ge SQL". Этот стандарт, известный как SQL99 (или определяет то лько язык SQL и не описывает которые предлагаются в PL/SQL. г поддерживает большинство свойств, требуемых частью CORE стандарта. Дополнительная информация находится в руководстве Oracle SQL Reference.

Свойства PL/SQL Мы рассмотрим различные свойства и возможности PL/SQL на приме рах. Подробное их обсуждение проводиться на протяжении всей книги.

Блочная структура Базовой единицей PL/SQL является блок (block). Все программы PL/SQL строятся из блоков, которые могут быть вложены один в другой.

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

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

ГЛАВА Обязательным является только выполняемый раздел. Он должен со держать по меньшей мере один выполняемый оператор. Разные разделы блока в программе PL/SQL предназначены для выполнения различных функций.

Язык программирования PL/SQL разработан на основе языка третье го поколения Ada. Многие конструкции, применяемые в Ada, можно най ти в PL/SQL. Одним из общих свойств этих языков является их блочная структура. Из Ada заимствованы также обработка исключительных ситуа ций, синтаксис объявления процедур и функций, модули.

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

-- Этот пример содержится в файле DECLARE NUMBER;

- код ошибки VARCHAR2(200);

- сообщение об ошибке VARCHAR2(8);

- текущий пользователь базы данных VARCHAR2(100);

- информация об ошибке BEGIN Здесь обрабатываются некоторые данные */ EXCEPTION WHEN OTHERS THEN - С помощью встроенных функций присвоим значения - переменным регистрации.

v_ErrorCode := SQLCODE;

:= v_CurrentUser := USER;

:= Error on ' || TO_CHAR(SYSDATE) ' by database user - Внесем сообщение об ошибке в таблицу log_table.

INSERT INTO (code, message, VALUES (v_ErrorCode, v_ErrorMsg, END;

Внимание Приведенный пример, как и многие другие, используемые в этой книге, можно найти в оперативной документации (см. раздел "Расположение примеров").

Введение в PL/SQL Переменные и типы данных Передача информации между PL/SQL и базой данных осуществляется с помощью переменных. Переменная (variable) — это область памяти, кото рая может быть считана или присвоена программой. В предыдущем при мере и — это переменные.

Переменные объявляются в разделе объявлений блока.

Каждая переменная ассоциируется с определенным типом данных (type). Тип данных определяет вид информации, которая может хранить ся в данной переменной. Переменные PL/SQL могут иметь тот же тип данных, что и столбцы таблицы базы данных:

DECLARE DATE;

Они могут иметь и какой-то иной тип:

DECLARE v_LoopCounter BINARY_INTEGER;

BOOLEAN;

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

Г) DECLARE TYPE t_StudentRecord IS RECORD ( VARCHAR2(10), );

t_StudentRecord;

Условные операторы Программа PL/SQL может исполнять различные части кода в зависимо сти от результата выполнения условия. Для этого применяются условные операторы. Основной конструкцией является оператор IF. Например, следующий блок запрашивает базу данных с целью определения общего числа студентов и вставляет соответствующие сообщения в таблицу — Этот пример содержится в файле DECLARE v_TotalStudents NUMBER;

BEGIN - Извлекаем из базы данных общее число студентов SELECT INTO FROM students;

10 - На основе этого значения вставляем подходящую строку в IF = о THEN INSERT INTO студентов ELSEIF < 5 THEN INSERT INTO лишь несколько ELSEIF < 10 THEN INSERT INTO немного ELSE INSERT INTO temp_table (char_col) много END IF;

END;

Циклические конструкции В PL/SQL поддерживаются различные виды циклов. Цикл (loop) позволя ет неоднократно выполнять одну и ту же последовательность операто ров. Например, в следующем блоке используется простой цикл для ввода цифр от 1 до 50 в таблицу — Этот содержится в файле Simple DECLARE BINARY_INTEGER := 1;

BEGIN LOOP INSERT INTO VALUES := + EXIT WHEN v_LoopCounter > 50;

END LOOP;

END;

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

Г) — Этот пример содержится в файле BEGIN FOR v_LoopCounter IN LOOP INSERT INTO VALUES END LOOP;

END;

Курсоры Курсор (cursor) используется для обработки нескольких строк, извлекаемых из базы данных с помощью оператора SELECT (выбрать). Посредством Введение в PL/SQL курсора программа может по очереди обрабатывать строки из возвращае мого набора строк. Например, ниже показано, как можно считать в базе данных имена и фамилии всех студентов:

— Этот пример содержится в файле DECLARE VARCHAR2(20);

- Объявление курсора. Задаем SQL-оператор, возвращающий - нужные CURSOR IS SELECT first_name, FROM students;

BEGIN - Начинаем обработку курсора.

OPEN LOOP - Считываем одну строку.

FETCH INTO v_FirstName, -- Выходим из цикла после того, как считаны все строки.

EXIT WHEN /* Обрабатываем данные */ END LOOP;

-- Заканчиваем обработку.

CLOSE c_Students;

END;

Процедуры и функции Процедуры и функции (называемые в совокупности подпрограммами (sub — это блоки PL/SQL, которые можно хранить в базе данных в компилированном виде, а затем вызывать из некоторого блока. Например, создадим процедуру PrintStudents, выводящую на экран имена и фамилии всех студентов указанного профиля с помощью модуля — Этот содержится в файле CREATE OR REPLACE PROCEDURE IN AS CURSOR IS SELECT FROM students WHERE major = BEGIN FOR v_StudentRec IN c_Students LOOP |l END LOOP;

END;

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

Этот пример в SQL> BEGIN 3 END;

4/ Scott Smith Joanne Shay Внимание Выходные данные можно просмотреть в воспользовавшись командой set on (см. главу 2).

Модули Подпрограммы, переменные и типы можно группировать в модули. Мо дуль (package) состоит из двух частей: описания (спецификации) и тела.

С его помощью можно сохранять в базе данных объекты, связанные меж ду собой. Например, в модуле RoomsPkg содержатся процедуры, внося щие сведения о новой аудитории и удаляющие сведения об аудитории из таблицы rooms:

— Этот пример содержится в файле CREATE OR REPLACE PACKAGE RoomsPkg AS PROCEDURE rooms.

p_Description END RoomsPkg;

CREATE OR REPLACE PACKAGE BODY RoomsPkg AS PROCEDURE rooms.

rooms.

rooms.

p_Description IS BEGIN INSERT INTO rooms building, description) VALUES p_Building, p_NumSeats, p_Description);

END PROCEDURE IN IS BEGIN Введение в PL/SQL DELETE FROM rooms WHERE = END END Сборные конструкции Сборные конструкции PL/SQL аналогичны массивам в других языках третьего поколения. В PL/SQL применяются сборные конструкции трех типов: индексные таблицы, вложенные таблицы и выше) и изме няемые массивы и Все эти типы показаны в следующем примере:

— Этот пример содержится в файле DECLARE TYPE IS TABLE OF NUMBER INDEX BY BINARY_INTEGER;

TYPE t_Nested IS TABLE OF NUMBER;

TYPE t_Varray IS VARRAY(10) OF NUMBER;

v_IndexBy t_IndexBy;

v_Nested t_Nested;

v_Varray t_Varray;

BEGIN := 1;

:= 2;

v_Nested := t_Nested(1, 2, 3, 4, 5);

v_Varray := t_Varray(1, END;

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

PL/SQL и версии Oracle PL/SQL входит в состав сервера Oracle. Первая версия PL/SQL, имею щая номер 1.0, была выпущена вместе с Oracle версии 6. содер жит PL/SQL 2.x В номер версии PL/SQL был изменен на 8, поэтому в (что соответствует содержится PL/SQL вер 8.1, a включает в себя PL/SQL версии 9.0. Каждая последую щая версия базы данных содержит PL/SQL соответствующей версии, как показано в таблице В эту таблицу также включено описание новых свойств каждой версии. В книге рассматриваются версии PL/SQL с 2. до Средства, доступные только в конкретных версиях, выделяются значками:

В таком разделе обсуждается средство, доступное в PL/SQL 8.0 и выше, например, объектные типы.

14 ГЛАВА В таком разделе обсуждается средство, доступное в PL/SQL 8.1 и выше, например, внутренний динамический SQL.

В таком разделе обсуждается средство, доступное в PL/SQL 9.1 и выше, например, внутренняя компиляция.

Таблица Версии Oracle и PL/SQL Версия Версия Добавленные или измененные средства Oracle PL/SQL 6 1.0 Первоначальная версия 7.0 2.0 Тип данных CHAR стал иметь фиксированную длину.

Хранимые подпрограммы (процедуры, функции, модули и триггеры).

Составные типы данных, определяемые пользователями: таблицы и записи.

Взаимодействие между сеансами с помощью модулей и Вывод данных в SQL*Plus или Server Manager с помощью модуля 7.1 2.1 Подтипы, определяемые пользователями.

Возможность применения в SQL-операторах функций, определяемых пользователями.

Динамический с применением модуля 7.2 2.2 Курсорные переменные.

Ограниченные подтипы данных, определяемые пользователями.

Возможность планирования обработки пакетов при помощи - модуля 7.3 2.3 Усовершенствованные курсорные переменные (возможность выборки данных на сервере и слабо типизированные переменные).

Файловый при помощи модуля UTL_FILE.

Атрибуты таблиц PL/SQL и таблицы записей.

Триггеры, хранимые в компилированном виде.

8.0 8.0 Объектные типы и методы.

Типы сборных конструкций: вложенные таблицы и изменяемые массивы.

Средство Advanced Queuing (усовершенствованная организация очередей).

Внешние процедуры.

Усовершенствованные LOB (большие объекты).

8.1 8.1 Внутренний динамический SQL.

Внешние подпрограммы Java.

Права вызывающей стороны.

Параметры NOCOPY.

Автономные транзакции.

Операции с большими объемами данных.

9.0 9.0 Внутренняя компиляция.

Инструкция Типы данных и Канализированные и табличные функции.

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

Connected to:

Enterprise Edition Release 8.0.6.0.0 - Production With the Objects option PL/SQL Release - Production и Connected to:

Oracle8i Enterprise Edition Release - Production With the Partitioning and Java options PL/SQL Release - Production и Connected to:

Oracle9i Enterprise Edition Release - Production With the Partitioning option JServer Release - Production Обратите внимание на то, что версия PL/SQL соответствует версии базы данных. В версия не выводится. Однако если вы запросите представление словаря данных то увидите версию PL/SQL сре ди версий других компонентов как показано в следующем сеансе SQL> SELECT FROM v$version;

BANNER Oracle9i Enterprise Edition Release - Production PL/SQL Release - Production CORE 9.0.1.0.0 Production TNS for Solaris: Version - Production Version - Production Большинство примеров, приведенных в этой книге, выполнено с щью Oracle 8.1.7, работающей в системе Solaris. Примеры для на писаны с применением ерсии также в Solaris. Все экраны получены в системе Windows NT, соединенной с базой данных на сервере Solaris.

Документация Oracle В этой книге автор ссылается на документацию Oracle, в которой приво дится более подробная информация. Названия руководств различны в разных версиях, поэтому, как правило, используется сокращенный вари ант названия. под "Oracle Server Reference" подразумевается 16 Server Reference", г Server Reference" или i Server Reference" в зависимости от используемой версии Oracle.

Дополнительное программное обеспечение "Лори" содержатся:

• Исходный код приводимых примеров. Этот код можно найти также на web-странице издательства Oracle Press:

www.osborne.com.

• Пробные версии пяти инструментальных средств различных произ водителей. Они находятся в каталоге Development Tools (см. главу 2).

Более подробно об содержащейся на сайте, можно уз нать в файле html, который находится в корневом каталоге.

Местонахождение примеров Имя файла, в котором содержится пример, указывается в комментарии в первой строке кода. Все примеры находятся на сайте (и на web-странице) в каталоге причем подкаталоги этого каталога соответствуют номе рам глав. Для примера приведем цикл, рассмотренный выше:

— Этот пример содержится в файле DECLARE 1;

BEGIN LOOP INSERT INTO temp_table VALUES (v_LoopCounter);

:= 1;

EXIT WHEN > 50;

END LOOP;

END;

Этот пример можно найти в файле В файле html описаны все примеры.

используемые в примерах Во всех примерах, приводимых в книге, используется общий набор таб лиц базы данных, при помощи которых реализуется система регистрации студентов одного из колледжей. Имеются три основные таблицы: stu dents (студенты), classes и rooms (аудитории). Как до полнение, в таблице registered_students содержится информация о студентах, записавшихся в учебные группы.

Ниже подробно описывается структура этих таблиц и указываются SQL-операторы, необходимые для их создания.

Введение в PL/SQL Внимание Все эти таблицы можно создать при помощи сценария который находится в подкаталоге code на сайте издательства "Лори" по адресу: ru.

Последовательности Последовательность используется для генерирования уни кальных значений первичного ключа таблицы students, а последователь ность — для генерирования уникальных значений первичного ключа таблицы rooms.

CREATE SEQUENCE START WITH INCREMENT BY CREATE SEQUENCE START WITH INCREMENT BY students В таблице students содержится информация о студентах, посещающих колледж. (Здесь id — идентификатор, — имя, — фами лия, major — профилирующая дисциплина, current_credits — текущее чис ло зачетов.) CREATE TABLE students ( id PRIMARY KEY, VARCHAR2(20), last_name major VARCHAR2(30), NUMBER(3) );

INSERT INTO students (id, major, VALUES INSERT INTO students (id, last_name, major, current_credits) VALUES 4);

INSERT INTO students (id, last_name, major, current_credits) VALUES 'Junebug', 8);

INSERT INTO students (id, current_credits) VALUES 18 ГЛАВА 8);

INSERT INTO major, 4);

INSERT INTO students(id, major, VALUES 4);

INSERT INTO students(id, major, current_credits) VALUES 7);

INSERT INTO major, VALUES 4);

INSERT INTO students(id, major, VALUES 8);

INSERT INTO students(id, first_name, major, VALUES 'Riznit', 7);

INSERT INTO students(id, major, VALUES 8);

INSERT INTO students(id, major, VALUES 3);

В таблице хранятся статистические сведения о различных профилирующих дисциплинах. (Здесь total_credits — общее число заче тов, — общее число студентов.) CREATE TABLE ( major VARCHAR2(30), NUMBER, total_students NUMBER);

INSERT INTO major_stats(major, total_credits, total_students) в PL/SQL VALUES 22, 3);

INSERT INTO total_students) VALUES 12, 3);

INSERT INTO total_credits, VALUES 15, 2);

INSERT INTO total_credits, VALUES 11, 2);

INSERT INTO total_credits, total_students) VALUES 16, 2);

rooms В таблице rooms хранится информация об аудиториях. (Здесь идентификатор аудитории, building — здание, — номер ауди тории, — число мест, description — описание.) CREATE TABLE rooms ( NUMBER(5) PRIMARY KEY, building VARCHAR2(15), description VARCHAR2(50) );

INSERT INTO rooms building, description) VALUES 201, 1000, Lecture INSERT INTO rooms building, number_seats, description) VALUES 101, 500, Lecture INSERT INTO rooms building, description) VALUES 150, 50, Room INSERT INTO rooms (room_id, building, description) VALUES 160, 50, Room INSERT INTO rooms (room_id, building, number_seats, description) VALUES 170, 50, Room INSERT INTO rooms building, room_number, description) VALUES 100, 10, Practice INSERT INTO rooms building, description) VALUES 200, 1000, INSERT INTO rooms building, description) VALUES 300, 75, Room INSERT INTO rooms building, description) 20 ГЛАВА VALUES 310, 50, Room classes Таблица classes описывает курсы лекций, которые могут посещать сту денты. (Здесь department — факультет, course — курс лекций, — максимальное число студентов, — текущее число студен тов, — число зачетов.) CREATE TABLE classes ( department CHAR.(3), course description current_students.

room_id CONSTRAINT PRIMARY KEY (department, course), CONSTRAINT FOREIGN KEY REFERENCES rooms );

INSERT INTO description, VALUES 101, 30, 11, 4, 20000);

INSERT INTO classes(department, course, description, max_students, VALUES 301, 30, 0, 4, 20004);

INSERT INTO classes(department, course, description, current_students, num_credits, VALUES 101, Science 50, 0, 4, 20001);

INSERT INTO course, description, current_students, num_credits, VALUES 203, 15, 0, 3, INSERT INTO course, description, current_students, VALUES 102, Science 35, 3, 4, 20003);

INSERT INTO course, description, room_id) VALUES 410, 5, 4, 3, 20005);

INSERT INTO course, description, room_id) VALUES 101, 50, 0, 4, 20007);

INSERT INTO course, description, current_students, VALUES С 307, 20, 2, 4, 20008);

Введение в PL/SQL INSERT INTO course, description, current_students, VALUES 100, 100, 0, 3, NULL);

В таблице содержится информация о курсах лекций, которые посещают в настоящее время студенты. (Здесь — иден тификатор студента, g rade — оценка.) Г) CREATE TABLE registered_students ( NOT department NOT NULL, course NOT NULL, grade CONSTRAINT CHECK (grade IN CONSTRAINT rs_student_id FOREIGN KEY (student_id) REFERENCES students (id), CONSTRAINT FOREIGN KEY (department, course) REFERENCES classes (department, course) );

INSERT INTO registered_students (student_id, department, course, grade) VALUES (10000, 102, INSERT INTO registered_students (student_id, department, course, grade) VALUES (10002, 102, INSERT INTO (student_id, department, course, grade) VALUES (10003, 102, INSERT INTO registered_students (student_id, department, course, grade) VALUES (10000, 101, INSERT INTO registered_students department, course, grade) VALUES (10001, 101, INSERT INTO registered_students department, grade) VALUES (10002, 101, INSERT INTO registered_students (student_id, department, course, grade) VALUES (10003, 101, INSERT INTO registered_students (student_id, department, course, grade) VALUES (10004, INSERT INTO registered_students (student_id, department, course, grade) VALUES (10005, 101, INSERT INTO registered_students (student_id, department, course, grade) VALUES (10006, 101, INSERT INTO registered_students (student_id, department, course, grade) 22 VALUES (10007, 101, INSERT INTO department, course, grade) VALUES (10008, 101, INSERT INTO (student_id, department, course, grade) VALUES (10009, 101, INSERT INTO registered_students (student_id, department, course, grade) VALUES (10010, 101, INSERT INTO registered_students (student_id, department, course, grade) VALUES (10008, 307, INSERT INTO (student_id, department, course, grade) VALUES (10010, 307, INSERT INTO (student_id, department, course, grade) VALUES (10009, 410, INSERT INTO registered_students department, course, grade) VALUES (10006, 410, 'E');

INSERT INTO registered_students (student_id, department, course, grade) VALUES (10011, 410, INSERT INTO (student_id, department, grade) VALUES (10000, 410, Таблица используется для записи изменений, вносимых в табли цу (Здесь change_type — вид изменения, changed_by кем изменено, — временная метка, — старый идентификатор студента, — старый факультет, old_course — старый курс лекций, old_grade — старая оценка, new_student_id — новый идентификатор студента, — новый факультет, new_course — новый курс лекций, CREATE TABLE RS_audit ( change_type CHAR(1) NOT NULL, changed_by VARCHAR2(8) NOT NULL, timestamp DATE NOT NULL, old_studentid old_department CHAR(3), NUMBER(3), CHAR(1), CHAR(3), Введение в PL/SQL log_table Таблица log_table используется для записи ошибок Oracle. (Здесь code код, message — сообщение, — информация.) Г) CREATE TABLE log_table ( code NUMBER, message VARCHAR2(200), info VARCHAR2(100) );

temp_table Таблица используется для хранения временных данных. (Здесь — числовой столбец, — символьный столбец.) CREATE TABLE ( NUMBER, VARCHAR2(60) class_material и library_catalog Таблицы books, и library_catalog служат для представления библиотеки, используемой студентами. Они предназначены для демонст рации применения сборных конструкций (см. главу 8).

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

ГЛАВА Среды разработки и выполнения 26 PL/SQL можно выполнять в различных средах, каждая из кото рых обладает собственными свойствами и возможностями. В этой главе рассказывается о том, где может располагаться система поддержки PL/SQL. Обсуждаются различные среды, применяемые разработчиками приложений PL/SQL, в том числе инструментальные средства Oracle и других производителей.

Прикладные модели и PL/SQL Приложение, работающее с базами данных, можно разделить на три части:

• Интерфейс пользователя, отвечающий за внешний вид приложе ния. Этот уровень управляет вводом пользователя и выводит резуль таты работы приложения.

• Логика приложения, управляющая его работой.

• База данных, обеспечивающая надежное хранение прикладных данных.

Эти компоненты могут размещаться в разных местах в соответствии с двумя различными моделями проектирования приложений.

Чтобы скомпилировать и выполнить блок PL/SQL, необходимо пере дать его системе поддержки PL/SQL. Подобно виртуальной машине Java, система поддержки PL/SQL (PL/SQL engine) состоит из компилятора и ис полняющей системы. С помощью инструментальных средств разработки, предлагаемых корпорацией Oracle и другими производителями, PL/SQL можно применять на любом из прикладных уровней, поэтому системы поддержки PL/SQL могут находиться в разных местах.

Двухуровневая модель Двухуровневая модель, или модель клиент/сервер, является традицион ной для проектирования приложений. Приложение разбивается на две части: клиентскую и серверную. Клиент управляет интерфейсом пользо вателя, а сервер содержит базу данных. Логика приложения распределя ется между клиентом и сервером. Система поддержки располагается на сервере, а в некоторых случаях — еще и на машине клиента.

PL/SQL на сервере Начиная с Oracle версии 6, PL/SQL доступен на сервере базы данных, и сервер является исходным местоположением системы поддержки PL/SQL. Поскольку сервер базы данных обрабатывает также операторы SQL, это означает, что можно посылать в базу данных и там обрабаты вать как SQL-операторы, так и блоки PL/SQL. Приложение клиента, на писанное при: помощи средств разработки программ Oracle или средств других производителей, может направлять серверу как SQL-операторы, Среды разработки и выполнения так и блоки PL/SQL. Примером приложения, в котором SQL-операторы и блоки PL/SQL вводятся в диалоговом режиме в ответ на приглашение SQL, а затем посылаются на сервер для выполнения, является SQL*Plus.

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

По ходу дела мы подробно рассмотрим синтаксис блоков PL/SQL и опера торов таких как оператор CREATE OR REPLACE PROCEDURE.

— Этот пример содержится в файле CREATE OR REPLACE AS 2 BEGIN 3 NULL;

4 END ServerProcedure;

5 / Procedure SQL> DECLARE 2 v_StudentRecord 3 BINARY_INTEGER;

4 BEGIN 5 := 7;

7 SELECT * INTO v_StudentRecord 9 FROM students 10 WHERE id = 10001;

12 ServerProcedure;

14 END;

15 / PL/SQL procedure successfully completed.

UPDATE classes 2 SET = 3 WHERE department = 4 AND course = 101;

1 row updated.

Внимание Этот пример, как и многие другие, находится на сайте издательства "Лори" по адресу: ru. Подобные примеры помечены комментарием - Этот пример содержится в файле Более подробную информацию, включая описание всех файлов, можно найти в файле в каталоге code.

28 Описанный сценарий показан на рис. 2.1. Приложение клиента (в данном случае — посылает по сети на сервер блок PL/SQL (содержащий как процедурные, так и SQL-операторы, включая вызов серверной храни мой процедуры) и отдельный На сервере SQL-оператор на правляется непосредственно обработчику SQL-операторов, а блок PL/SQL передается системе поддержки PL/SQL, где подвергается грамма тическому разбору. Во время выполнения блока система PL/SQL исполня ет процедурные операторы (например, операции присваивания и вызовы хранимых процедур), однако все SQL-операторы внутри блока (например, оператор SELECT) направляются обработчику SQL-операторов.

Приложение клиента DECLARE UPDATE classes BEGIN SET = v_Counter := 7;

WHERE department = AND course SELECT * INTO FROM students WHERE id = 10001;

END;

Данные, Анонимные блоки посылаемые по сети целиком передаются системе поддержки на сервере для исполнения SQL-операторы, посланные клиентом, Обработчик передаются Процедурные процедурных непосредственно том числе операторов обработчику вызов процедуры) SQL-операторов обрабатываются Система поддержки системой поддержки PL/SQL SQL-операторы внутри блоков анализируются системой Обработчик поддержки SQL-операторов и передаются обработчику SQL-операторов Сервер базы данных Oracle Рис. 2.1. Система поддержки PL/SQL на сервере Среды разработки и выполнения Большая часть приложений, использующих PL/SQL, будет применять систему поддержки PL/SQL на сервере, а не на клиенте. Обычно прило жение (которое может быть написано на Pro*C, OCI или другом языке программирования) находится на клиенте и посылает на сервер как операторы SQL, так и блоки PL/SQL. Как правило, блоки передаются тем же образом, что и операторы SQL, с дополнительной об работкой для извлечения значений выходных переменных. Подробную информацию об отправке блоков PL/SQL из определенного клиентского инструментального средства можно найти в документации Oracle.

PL/SQL на стороне клиента В дополнение к системе поддержки PL/SQL, размещенной на сервере, два из инструментальных средств разработки Oracle (Forms и Reports) содер жат собственные системы поддержки PL/SQL. Инструментальное средст во работает не на сервере, а на клиента. Здесь же запускается система поддержки PL/SQL. Если на станции клиента установлена систе ма поддержки PL/SQL, процедурные операторы блоков PL/SQL выполня ются на клиентской стороне и не направляются серверу. Клиентская система поддержки PL/SQL отличается от системы, установленной на сер вере. Блоки PL/SQL содержатся в приложении клиента, создаваемом при помощи инструментальных средств. К примеру, в приложении Oracle Forms имеются триггеры и Такие приложения выполняются на станции клиента, и только содержащиеся в них SQL-операторы и вызо вы серверных хранимых подпрограмм посылаются для обработки на сер вер. Все процедурные операторы выполняются локальной системой поддержки PL/SQL, находящейся на клиентской стороне (рис. 2.2).

Как и прежде, отдельные выдаваемые приложением (оператор посылаются по сети непосредственно на сервер, об работчику SQL- операторов. Однако блоки PL/SQL обрабатываются ло кально клиентом. Все процедурные операторы (например, операция присваивания) обрабатываются, не затрагивая сетевой трафик. SQL-опе раторы блока PL/SQL (например, SELECT) посылаются обработчику, а вызовы серверных хранимых подпрограмм передаются серверной систе ме поддержки PL/SQL.

Oracle, подобные или Pro*COBOL, используются для создания приложений, выполняющих программные конструкции PL/SQL на сервере. В таких приложениях от сутствует система поддержки и SQL-операторы, и формируемые приложением, пересылаются для обработки на сервер.

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

30 ГЛАВА Приложение клиента DECLARE v_Counter UPDATE classes BEGIN SET WHERE department = AND course = 101;

SELECT * INTO v_StudentRecord FROM students WHERE id = 10001;

Обработчик процедурных операторов Клиентская система поддержки PL/SQL Анонимные блоки целиком передаются Данные, клиентской системе посылаемые по сети поддержки которая обрабатывает локальные процедурные операторы SQL-операторы, Обработчик посланные клиентом, Вызовы серверных процедурных передаются непосредственно хранимых операторов обработчику SQL-операторов из клиентской системы поддержки PL/SQL Серверная система в серверную систему поддержки PL/SQL поддержки SQL-операторы внутри блоков передаются Обработчик клиентской системой SQL-операторов поддержки обработчику SQL-операторов Сервер базы данных Oracle Рис. 2.2. Система поддержки PL/SQL на стороне клиента Взаимодействие систем поддержки На рис. 2.2 представлены две отдельные системы поддержки PL/SQL, ко торые взаимодействуют друг с другом. Например, триггер формы (запу щенный в клиентском PL/SQL) может вызывать хранимую процедуру в базе данных (запущенную в серверном PL/SQL). Такое взаимодействие Среды разработки и осуществляется через вызовы удаленных процедур remote procedure calls). Аналогичный алгоритм используется при взаимодействии двух сис тем поддержки PL/SQL, расположенных на двух различных серверах, по средством соединения баз данных.

В такой ситуации объекты PL/SQL из разных систем поддержки могут зависеть друг от друга. Взаимоотношения подобного рода устанавливают ся и среди объектов PL/SQL одной базы данных, но с рядом оговорок (см. главу 10).

Трехуровневая модель В трехуровневой модели пользовательский интерфейс, логика ния и база данных представляют собой три отдельные части. Клиент в та кой модели, как правило, "тонкий";

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

Oracle Internet Application Server (IAS) является полнофункциональ ным прикладным сервером. С помощью картриджа PL/SQL на сервере Обработчик операторов Система поддержки \ на сервере \ Обработчик SQL-операторов Браузер клиента Сервер приложений Сервер баз данных Oracle / Картридж Клиент вызывает выступает как клиент серверные подпрограммы по отношению к серверу генерирующие выходные и посылает блоки PL/SQL данные в формате HTML и SQL-операторы на сервер для выполнения Рис. 2.3. Трехуровневая модель 32 выполняются хранимые процедуры, а результаты возвращаются в виде HTML-страниц. Упрощает работу web-пакет PL/SQL (PL/SQL Web Tool kit), являющийся частью IAS (рис. 2.3). За более подробной информацией о картриджах и о PL/SQL обращайтесь к документации Oracle.

Внимание В Oracle9i приложения Forms и Reports выполняются автономно как часть трехуровневой системы, а не в традиционной клиент-серверной среде.

Соединение с базой данных Как говорилось выше, операторы PL/SQL (и SQL) посылаются обычно для выполнения на сервер. Чтобы сделать это, необходимо сначала уста новить соединение с базой данных и создать сеанс базы данных. При этом требуется, чтобы база данных пользователя, для чего применяются идентификатор пользователя и пароль.

В PL/SQL не определен синтаксис для соединения с базой данных и для создания сеанса базы данных. Это делается средой, которая посылает команды PL/SQL. Например, в для этого служит команда con nect. Другие инструментальные средства имеют собственные мето ды для создания соединения с базой данных (см. ниже).

То же самое производится в клиентской системе поддержки SQL.

Способ аутентификации может быть иным (без применения идентифика тора пользователя и пароля), тем не менее клиентская среда (такая, как Oracle Forms) отвечает за отправку блоков PL/SQL системе поддержки после некоторой аутентификации.

Инструментальные средства разработки программ PL/SQL Существует множество различных инструментальных средств, позволяю щих разрабатывать и отлаживать приложения PL/SQL, со своими досто инствами и недостатками. В данном разделе мы кратко рассмотрим среды разработки, перечисленные в таблице 2.1. Как видно из этой таблицы, поставляется корпорацией Oracle вместе с сервером, а осталь ные средства поставляют другие производители. Пробные версии инстру ментов находятся на сайте издательства "Лори" по адресу: ru.

| Внимание Инструментальные средства находятся в каталоге Development Tools. За дополнительной информацией обращайтесь к файлу html в корневом каталоге.

Среды разработки и выполнения Таблица Среды разработки программ PL/SQL Инструментальное Производитель Web-сайт Есть ли на сайте средство издательства "Лори" Oracle Corporation www.oracle.com Нет Embarcadero www.embarcadero.com Rapid SQL™ Да www.compuware.com Да Quest Software www.quest.com SQL Navigator™ Да Quest Software Www.quest.com Да или www.toadsoft.com BMC Software www.bmc.com Да PL/SQL Developer Allround Authomations www.allroundautomations.nl Да Для согласованности все экраны, приводимые в последующих разделах, получены в схеме с одним и тем же набором объектов PL/SQL. Во всех случаях инструменты разработки выполняются на компьютере Windows NT, соединенном с базой данных на сервере Solaris. В дополнение к используемым в этой книге таблицам и типам данных (см. главу 1) при водятся примеры других типов данных и Java. В следующей таб лице представлены объекты, применяемые в этой главе. Для их создания можно использовать файл Имя объекта Тип объекта Выполняемый сценарий Примеры таблиц и типов Последовательности, типы данных Процедура Функция Процедура ClassPackage Point Объектный тип SimpleClass Исходный код Java пожалуй, самый простой из инструментов разработки про грамм PL/SQL. Он дает пользователям возможность вводить SQL-опера торы и блоки PL/SQL в диалоговом режиме в ответ на приглашение.

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

ГЛАВА Обычно поставляется вместе с сервером Oracle и ча стью стандартной системы Oracle. За более подробной информацией о и его командах обращайтесь к руководству User's Guide and Reference".

Команды SQL*Plus не учитывают регистр символов. Так, все эти команды используются для объявления переменных привязки:

SQl> VARIABLE NUMBER SQL> variable char(3) SQL> vaRIAbLe v_Varchar VarCHAR2(5) Хотя является средой символьного режима, версия для Win dows содержит некоторые операции GUI. Они служат для соединения с базой данных и задания различных параметров которые до ступны также в командах символьного режима. В системе UNIX не суще ствует версии с GUI.

предоставляет версию которая создана для работы в браузере. Эта версия, называемая выдает приглашение для ввода в символьном режиме в а выходные данные показы вает ниже. аналогично версии Windows, поддерживает неко торые операции GUI (такие, как соединение с базой данных и чтение файлов), по сути, работает в символьном режиме. Дополнительную информацию по установке и использованию можно найти в документации Oracle.

Соединение с базой данных В перед отправкой каких-либо инструкций SQL и PL/SQL необ ходимо установить соединение с сервером. Это можно сделать одним из следующих способов:

• Путем передачи идентификатора и пароля пользователя (и, как до полнение, строки соединения) в командной строке • С помощью оператора connect в • (Только для Windows и Посредством определения имени пользователя, пароля и, как дополнение, строки соединения в началь ном диалоговом окне Log On В приведенном ниже примере показано, что если пароль не указан, предлагает ввести его, при этом входные данные не отображают ся на экране. Диалоговое окно Windows Log On представлено на рис. 2.4.

$ example/example Release 9.0.1,0.0 - Production on Tue Oct 9 16:32:22 (c) Copyright 2001 Oracle Corporation. All rights reserved.

Connected Oracle9i Enterprise Edition Release - Production With the option JServer Release - Production Среды разработки и выполнения SQL> exit Disconnected Oracle9i Enterprise Edition Release - Production With the Partitioning option JServer Release 9.0.1.0.0 - Production $ sqlplus example SQL*Plus: Release 9.0.1.0.0 - Production on Tue Oct 9 16:33:23 (c) Copyright 2001 Oracle Corporation. reserved.

Enter password:

Connected to:

Oracle9i Enterprise Edition Release - Production With the Partitioning option JServer Release - Production SQL> connect example/example SQL> connect User Name:

Host String:

OK Cancel Рис. 2.4. Диалоговое окно SQL*Plus Log On Выполнение SQL и PL/SQL После запуска выводит приглашение Здесь можно вво дить команды SQL или PL/SQL для отправки на сервер. Можно также вводить команды самого SQL*Plus (такие, как команда set serveroutput on, см. ниже). При выполнении в нужно ставить точку с запятой (или прямую наклонную черту (forward в конце SQL-оператора.

Точка с запятой не является элементом собственно оператора — это при знак его окончания. Когда SQL*Plus считывает точку с запятой, он знает, что оператор завершен, и посылает базе данных. В PL/SQL точка с запятой является синтаксическим элементом блока, а не признаком окон чания оператора. При вводе пользователем ключевого слова DECLARE или BEGIN SQL*Plus понимает, что пользователь запускает на выполне ние блок PL/SQL, а не SQL- оператор. Однако должен знать о том, когда завершится блок. Для этого применяется слэш, который соот ветствует команде RUN SQL*Plus. SQL*Plus позволяет также закончить блок PL/SQL точкой, после которой можно ввести run или другую команду SQL*Plus.

36 ГЛАВА На рис. 2.5 показаны блок PL/SQL и оператор SQL. Обратите внима ние на слэш после блока PL/SQL, который обновляет таблицу registe Для оператора SELECT, идущего после блока, слэш не требуется, поскольку указана точка с запятой (однако при желании для SQL-операторов вместо точки с запятой можно вводить и слэш). На рисун ке также представлены результаты работы блока (сообщение "successfully completed") и оператора SELECT (данные из таблицы).

0» SQL> DECLARE 2 CURSOR IS 3 SELECT * registered_students - course 6 FOR OF grade;

7 BEGIN 8 FOR IN c_Music410Students LOOP 9 registered_students SET grade 11 WHERE CURRENT OF с 12 END LOOP;

13 END;

successfully conpleted.

SQL> SELECT « 3 WHERE - course STUDENT ID DEP COURSE G 10009 MUS ft MUS Й 10011 MUS 410 Й 10000 MUS 410 Й SQL> Рис. 2.5. PL/SQL в Использование файлов SQL*Plus дает возможность сохранить текущий блок PL/SQL или опера тор SQL в файле, который затем можно считать и выполнить. Это полез но, как при разработке программ PL/SQL, так и при их последующем выполнении. К примеру, можно сохранить в файле команду CREATE OR REPLACE, а затем внести нужные изменения в процедуру или функцию, отредактировав этот файл. Для сохранения изменений в базе данных до статочно считать файл в SQL*Plus. В одном файле может содержаться не сколько команд.

Команда start, предоставляемая SQL*Plus, считывает файл (с диска либо в Web с помощью Любой текст, записанный в фай ле, будет запущен на выполнение, как если бы он был введен непосредст венно с клавиатуры. Символ @ является сокращенной записью команды start. Предположим, что файл содержит следующее:

• - Этот пример содержится в файле File.sql BEGIN Среды разработки и выполнения FOR IN LOOP INSERT INTO char_col) VALUES (v_Count, END LOOP;

END;

SELECT * FROM Можно запустить этот файл из приглашения SQL:

@File Полученный результат представлен на рис. 2.6. Команда set echo on (первая команда) указывает что по прочтении нужно вывести содержимое файла на экран.

Search Help set echo on SQL> BEGIN 2 FOR IN LOOP 3 INSERT INTO END LOOP;

6 END;

7 / PL/SQL procedure successfully completed.

SELECT « FROM CHflR COL 1 Hello World!

2 Hello World!

3 Hello World!

Hello World!

5 Hello World!

Hello World!

7 Hello World!

8 Hello World!

9 Hello World!

10 Hello World!

rows selected.

J Рис. 2.6. Чтение из файла Совет Можно использовать этот прием для выполнения примеров, приводимых в книге.

Модуль DBMS_OUTPUT PL/SQL не имеет встроенных функций ввода/вывода. Модуль UTL_FILE (см. главу 12) предоставляет возможность чтения и записи в файлы, но 38 это не то же самое, что вывод на экран. Чтобы исправить ситуацию, совместно с модулем DBMS_OUTPUT обеспечивает возмож ность вывода сообщений на экран. Это делается в два этапа:

Нужно включить режим вывода в с помощью команды set Эта команда имеет формат:

[SIZE n] где п — размер выходного буфера. Если n не определено, по умолча нию используется 2000 байт. Максимальный размер равен 1 000 байт. Ключевые слова ON и OFF включают и выключают вывод.

2. В программе PL/SQL используется процедура DBMS_OUTPUT.PUT_ LINE, которая помещает свои аргументы в выходной буфер.

По завершении этих действий и выполнения блока выведет результат на экран. Во время выполнения буфер заполняется вызовами DBMS_OUTPUT.PUT_LINE. не извлекает содержимое из буфе ра и выводит его, когда управление возвращается т.е. после за вершения выполнения блока.

Внимание UTL_FILE являются модулями. Дополнительную информацию о создании и использовании модулей можно найти в главах 9 и 10, а в приложение А описываются многие модули, поставляемые вместе с базой данных.

Рис. 2.7 показывает некоторые вызовы модуля LINE.

Edit Search flptions Help SET ON SIZE BEGIN 2 from 3 is || / Hello from PL/SQL!

Today is PL/SQL procedure successfully ± Рис. 2.7. Использование DBMS OUTPUT Среды разработки и выполнения Rapid SQL Программный пакет Rapid SQL компании Embarcadero Technologies — это среда разработки с графическим интерфейсом пользователя. Среди ее свойств:

• Автоформатирование операторов PL/SQL и SQL • Поддержка отладки серверных процедур PL/SQL • Поддержка классов и исходного Java i т Доступ к данным PL/SQL • Планирование заданий SQL • Управление проектами • Поддержка Windows Active Scripting • Поддержка систем управления версиями, производимых другими компаниями За более подробными сведениями об установке и применении Rapid SQL обращайтесь к справочной информации.

Соединение с базой данных При первом запуске Rapid SQL появляется окно, подобное тому, что изображено на рис. 2.8. Левая панель предназначена для исследования !| Oracle Servers 8.1.7.0.0) (Oracle 0 Program Comput О О Program О Oracle module 0 1:36:23PM Program SQL Server Local 1 Г Рис. 2.8. Основное окно Rapid SQL объектов базы данных, отсортированных по источнику данных. Справа расположена рабочая панель, где отображаются объекты различных ти пов. В источнике данных (datasource) регистрируется вся информация, имеющая отношение к удаленной базе данных: тип базы, идентификатор и пароль пользователя, сведения о соединении. При первом выполнении Rapid SQL автоматически находит доступные источники данных, про сматривая конфигурацию SQL*Net используемого компьютера. По двой ному щелчку мыши на конкретном источнике данных открывается диалоговое окно, где можно указать идентификатор и пароль пользовате ля для установления соединения (см. рис. 2.9). Добавление новых источ ников данных и модификация существующих делаются при помощи меню Datasource.

Login to Login id:

Ж Рис. 2.9. Диалоговое окно соединения с базой данных Если нужно, Rapid SQL запомнит идентификатор и пароль пользовате ля для источника данных, чтобы не запрашивать их впоследствии. Одно временно могут быть открыты несколько соединений.

Выполнение SQL и PL/SQL SQL-операторы и блоки PL/SQL можно выполнять с помощью редактора SQL. Для создания редактора SQL служит меню | SQL. Редактор SQL может содержать как блоки PL/SQL (заканчивающиеся знаком /), так и операторы SQL. Все операторы и блоки внутри редактора можно вы полнить, нажав кнопку Execute (см. рис. 2.10). Для просмотра результатов следует перейти на вкладку Results (см. рис. Это окно содержит резу льтаты PL/SQL (такие, как сообщение об успешной компиляции) и выход ные данные запроса SQL. Выходные данные также отображаются в окне вывода результатов.

Средства отладки Rapid SQL дает возможность отлаживать хранимые процедуры, функции и триггеры PL/SQL. Анонимные блоки также можно отлаживать, но Rapid SQL автоматически будет создавать серверную процедуру, код анонимного блока, для его отладки. Отладчик позволяет выполнять Среды разработки и выполнения [SQL 1 -J flue tfrcSow a El с SSL ЕСТ * Check Constraints ft Database J OR OF grade;

FOR С с LOOP UPDATE 0 5 grade Java Classes 1 OF с 2 ЕГО LOOP;

Java S Packages 6 SELECT * 7 • course - 410;

Primary Keys 0.

Roles 1 OUTPUT. | 2 J ;

Sequences 4 / J Lira 24 Col 4 6 ( Рис. 2.10. Редактор SQL О M raged The command win no returned.

Check ID.......

...... X 10011 MUS".......................

"................. A Indexes DBHS 1 Today is fr^ Rofcack.......... Л Рис. 2.11. Вкладка Results 42 процедуры по шагам и просматривать значения переменных в текущей области действия. Можно также просматривать стек текущих вызовов и зависимости в любой точке. Пример сеанса отладки функции показан на рис.

Ц - E l| firowse Window Help ft | (Orade j ffl"^^?f i в a i * flagj j | tf1 i ! 1» I Managed 1 ( Servers 4 IS Check Constraints Database Links 9 80;

Functions | 12 •-• Indexes Classes 16 = Java 17 p fljjj' Name - Name jj P Рис. 2.12. Сеанс отладки Rapid SQL Дополнительные возможности Rapid SQL В дополнение к уже упомянутым возможностям, Rapid SQL предлагает следующие средства:

• Браузер объектов. Позволяет посматривать все объекты в заданном источнике данных. Объекты могут быть отсортированы по владельцу или по типу;

можно выбрать просмотр объектов, принадлежащих только пользователю.

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

• к PL/SQL. Позволяет использовать профай лер PL/SQL и выше) для анализа выполняющейся про граммы PL/SQL. Rapid SQL предоставляет GUI-интерфейс для настройки таблиц запуска и остановки профайлера и для анализа выходных данных.

Среды разработки и выполнения • Планирование заданий. Предоставляет возможность автоматически выполнять файлы и задания в указанное время. Результаты будут со храняться в файле или посылаться по email.

• Типы окон редактирования. Можно создавать и изменять различ ные типы объектов как на клиенте, так и на сервере. Сюда входят обычные файлы SQL и PL/SQL, файлы HTML и файлы Java.

• Средства генерации кода. Автоматически создают код для выпол нения операций DDL и других инструкций SQL на основе ввода пользователя.

• Управление версиями. Интегрируется с утилитами управления вер сиями других поставщиков для контроля за изменениями в файлах.

DBPartner Debugger Утилита DBPartner Debugger создана Compuware Corporation. Это графи ческая среда которая обладает следующими свойствами:

• Автоформатирование операторов SQL и SQL • Поддержка отладки серверных процедур PL/SQL и Java • Поддержка типов данных Java г • Управление проектами • Поддержка отладки и трассировки любого приложения • Поддержка систем управления версиями от сторонних поставщиков DBPartner Debugger входит в состав пакета продуктов DBPartner. Дру гими компонентами являются SQL Tuner и Viewer. Дополнительную ин формацию по установке и использованию DBParner Debugger можно найти в оперативной справочной системе.

Соединение с базой данных При первом запуске DBPartner Debugger предлагает установить соедине ние с базой данных. Можно сохранить профили различных соединений, каждый из которых записывает идентификатор пользователя и строку сое динения. Определив идентификатор пользователя как можно сохранить еще и пароль. Диалоговое окно показано на рис. 2.13.

Одновременно могут быть активными несколько соединений.

Чтобы правильно использовать DBPartner Debugger, требуется выпол нить настройку на сервере. При этом будет создан пользователь базы дан ных, который содержит таблицы с информацией, необходимой DBPartner Debugger. Настройку можно сделать во время установки либо уста новки программы с помощью мастера настройки базы данных (Database Setup экран которого показан на рис. 2.14. Мастер позво лит установить, удалить или обновить серверные объекты для несколь ких баз данных. Его можно запустить с помощью команды Database | Setup Wizard. Для серверной установки требуется соединение DBA, так как необходимо создать пользователя базы данных. Для других задач со DBA не нужно.

ГЛАВА Login Profile: J Cancel Delete Default Help Рис. 2.13. Диалоговое окно соединения DBPartner Debugger Debugger DB Setup This wizard will guide the DBPartner Debugger setup Please choose one of the following:

Install / upgrade Manage users Cancel Help Рис. 2.14. Начальный экран мастера настройки базы данных Выполнение SQL и PL/SQL Для выполнения инструкций SQL и PL/SQL используется окно SQL No tepad, создаваемое при выборе File | New SQL Notepad в меню. SQL Note pad может содержать как блоки PL/SQL (заканчивающиеся знаком /), так и операторы SQL. Содержимое SQL Notepad посылается на сервер при нажатии кнопки Execute (см. рис. 2.15). Выходные данные запросов SQL показываются в отдельном окне SQL Output (см. рис. 2.15). Выход ные данные модуля DBMS_OUTPUT.PUT_LINE представлены на вкладке DBMS Output в нижней панели SDL Notepad (см. рис. 2.16).

Среды разработки и выполнения Ed» Help и & 7 ra ' !!', с с LOOP US |E registered SET grade Student Department Course Grade 10000 410A LOOP;

410A « FROM - J BEGIH !

' || TO ] | j DBMS j | Line: Selected a» needed.

Line: 20 completed | | j A Рис. 2.15. Окно SQL Notepad DBMS Output j from i* Рис. 2.16. Вкладка DBMS Output Средства отладки DBPartner Debugger позволяет по шагам выполнять серверные програм мы PL/SQL и анонимные блоки. Для запуска сеанса отладки следует вы брать в меню File | New Debugger либо щелкнуть правой кнопкой мыши на объекте в браузере и выбрать Debug. Если отлаживаемый объект полу чает входные параметры, DBPartner Debugger попросит ввести значения и автоматически создаст анонимный блок с этими значениями для вызо ва объекта. Пример сеанса отладки показан на рис. 2.17.

Помимо отладки серверных процедур PL/SQL, DBPartner Debugger может отлаживать серверные Java-процедуры выше). Отлад чик будет автоматически проходить по шагам Java-процедуру, вызван ную из процедуры PL/SQL, и наоборот. Эта возможность является уникальной для DBPartner Debugger. Пример сеанса отладки Java показан рис. 2.18.

Status: Connected to:

0011 • • • • 0012 — 0015 FROM Li v :- FALSE;

TYPE FULL FULL tftf* p NUMBER :. NUMBER v Рис. 2.17. Отладка PL/SQL Edit fiption* class 0002 { static void { 0007 } type * fe Slack | Рис. 2.18. Отладка Java Среды разработки и выполнения DBPartner Debugger способен также автоматически запускать сеанс от ладки, когда заданная процедура выполняется некоторым сеансом в базе данных. Это позволяет отлаживать приложения, запущенные с других ма таких как серверы приложений. Сеанс отладки может также запус каться автоматически всякий раз, когда оператор SQL или блок PL/SQL посылается приложением, работающим на той же машине, что и DBPart ner Debugger.

Дополнительные возможности DBPartner Debugger В дополнение к уже рассмотренным возможностям, DBPartner Debugger предлагает следующие средства:

• Браузер объектов. Позволяет просматривать объекты в базе дан ных, отсортированные по типу объекта. Можно также посмотреть таблицы словаря данных, к которым вы имеете доступ. Двойной щел чок мыши на заданном объекте открывает его для редактирования.

• Типы окон редактирования. Позволяют просматривать и редакти ровать информацию, относящуюся к типу модифицируемого объек та. DBPartner Debugger поддерживает окна для редактирования SQL и таблиц/представлений. Окно редактирования SQL может модифицировать операторы SQL, блоки PL/SQL и исходный код Java.

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

• Управление версиями. Интегрируется с утилитами управления версиями от сторонних поставщиков для управления изменениями в файлах.

• План объяснения. Автоматически создает выходные данные плана объяснения выполнения операторов SQL.

• Другие продукты. Пакет DBPartner содержит также две утилиты:

SQL Tuner, которая может анализировать и настраивать операторы SQL, посылаемые любым приложением;

и SQL Viewer, которая спо собна перехватывать отдельные операторы SQL и блоки PL/SQL и направлять их отладчику или утилите просмотра.

SQL SQL Navigator создан компанией Quest Software. Это среда разработки с графическим интерфейсом пользователя, предлагающая следующие средства:

• Автоформатирование операторов PL/SQL и SQL • Отладчик PL/SQL • Средство просмотра баз данных (браузер) 48 • Поддержка объектных типов и типов г т Шаблоны программного текста • Поддержка систем управления версиями от сторонних производи телей Соединение с базой данных Подобно DBPartner Debugger, при первом запуске SQL Navigator предла гает установить соединение с базой данных. Профили соединений авто матически сохраняются для последующего использования, но пароль не сохраняется. Окно, применяемое для установления соединений, пред ставлено на рис. 2.19. Если после запуска соединение с базой данных не устанавливается, то будет предложено сделать это после открытия окна редактирования или окна просмотра. В SQL Navigator одновременно под держиваются несколько соединений с разными базами данных.

Connect to Database г Connection OK - EXAMPLE Cancel Delete EXAMPLE ' Connect String:

Рис. Диалоговое окно соединения SQL Navigator Navigator Side Installation Welcome to the SQL Navigator Server Side Wizard This Wizard will install or remove side objects for use by SQL Install Server Side Objects С Remove Server Side Objects To begin, click Next ц К Cancel Рис. 2.20. Мастер серверной установки Среды разработки и выполнения Многие свойства SQL Navigator требуют, чтобы на сервере был создан пользователь Мастер серверной установки (Server Side Installati on Wizard) помогает в создании необходимых пользователя и объектов.

Мастер может быть выполнен как часть процесса установки, а также после установки по команде Tools | Server Side Installation Wizard. Серверная установка нужна для поддержки плана объяснения, коллективного про граммирования, систем управления версиями независимых поставщиков и SQL Navigator Tuner. На рис. 2.20 показан начальный экран мастера.

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

Сценарии поддерживают также переменные подстановки (в смысле SQL*Plus). Можно выполнять отдельный оператор в сценарии или часть сценария. На рис. 2.21 показаны окно редактора SQL и окно выходных данных. Окно выходных данных будет содержать результаты каждого оператора (в случае запроса будут выведены данные), и в дополнение в нем могут быть показаны команды SQL или PL/SQL.

Для просмотра выходных данных DBMS_OUTPUT.PUT_LINE следует нажать кнопку Server Output ON или выбрать в меню Tools [ Server ЕЛ [2 j SQL Single SQL SQL - UP OF grade;

FOR SET CURRENT OF ' registered — ID G Рис. 2.21. Окно SQL Editor 50 ГЛАВА Debug j а| II I ?

LOOP;

BEGIN ' 4 rows is processed 1 (ON) to Рис. 2.22. Выходные данные DBMS_OUTPUT.PUT_LINE Output. Выходные данные DBMS_OUTPUT.PUT_LINE будут показаны среди других результатов в окне вывода (см. рис.

Средства отладки Чтобы выполнить PL/SQL в пошаговом режиме, необходимо включить режим Debug, нажав кнопку Debug ON либо выбрав в меню пункт Debug | PL/SQL Debugging. Выполнение блока будет производиться в отладчике, где можно проверять переменные, задавать контрольные точ ки и выполнять по шагам код. Пример сеанса отладки показан на рис. 2.23.

SQL Navigator подключаться к отдельному сеансу для отладки посылаемых им команд PL/SQL. Это требует, чтобы отдельный сеанс вы зывал DBMS_DEBUG с заданным именем сеанса, которое используется за тем SQL Navigator для идентификации сеанса.

Дополнительные средства SQL Navigator Помимо рассмотренных возможностей, SQL Navigator предлагает следу ющие средства:

• PL/SQL. Позволяет включать и выключать профилиро вание для заданной программы и просматривать данные профилиро вания. Поддержка профилирования не встроена непосредственно в SQL Navigator;

существует отдельный исполняемый файл, который разработки и выполнения I • ЕЛ IDC* © | x.?

\A EXAMPLE Name:

Г Safe Edit New Revert | j department — return IF / « 100) > ;

ELSE call Watches | Breakpoints j 4] new Рис. 2.23. Сеанс отладки необходимо установить для поддержки профилирования. Подроб ности можно найти в программе установки.

• Навигатор базы данных. Позволяет просматривать объекты в базе данных. DB Navigator имеет различные фильтры, которые можно использовать для ограничения показываемых объектов (текущим пользователем, например). Двойной щелчок мыши на объекте будет вызывать его для редактирования. Редактирование объектов Java не поддерживается в этой версии SQL Navigator, хотя они могут ком пилироваться и удаляться с помощью DB Navigator.

• Отдельные окна редактирования. Предлагаются отдельные типы окон редактирования для таких объектов базы данных, как табли цы, представления, сценарии SQL, блоки PL/SQL, хранимые про цедуры, триггеры и роли. Эти окна предоставляют графический интерфейс, который автоматически создает правильные команды SQL на основе ввода пользователя.

• Построитель запросов. Позволяет графически выбирать таблицы и столбцы для запроса, а также вводить WHERE и другие предложе ния оператора SELECT. Утилита построения запросов может также использоваться для автоматического создания инструкций DML.

52 ГЛАВА • Ошибки PL/SQL. Если отправленный блок PL/SQL содержит ошибки компиляции, они будут показаны при компиляции объектов в редакторе хранимых программ. По щелчку мыши на ошибке будет выделена строка исходного кода, а по двойному щелчку будет вызва но окно с указанием причины и действий, предлагаемых в докумен тации Oracle.

• Шаблоны кода. Утилита Code Assistant, доступная в меню Tools, предоставляет библиотеку наиболее часто используемых конструк ций PL/SQL и SQL. Выделение определенной конструкции вызыва ет описание в информационном окне Code Assistant, а двойной щелчок мыши копирует конструкцию в доступное окно редактиро вания, где ее можно изменить в соответствии с потребностями.

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

TOAD Утилита TOAD (Tool for Oracle Application Developers — инструмент для разработчиков приложений Oracle) первоначально создавалась отдельно от SQL Navigator, но сейчас производится компанией Quest Software вмес те с ним. Поэтому свойства этих инструментальных средств во многом схожи, включая способ лицензирования. Тем не менее существуют и от личия. TOAD предлагает следующие возможности:

• Автоформатирование операторов PL/SQL и SQL • Отладчик процедур PL/SQL • Средство просмотра баз данных • Поддержка объектных типов и типов г т Шаблоны программного текста • Поддержка систем управления версиями, производимых другими компаниями TOAD — простая, но в то же время эффективная среда разработки программ. Для ее функционирования необходим меньший объем диско вой и оперативной памяти, чем для других инструментальных средств разработки.

Соединение с базами данных TOAD может поддерживать одновременно несколько соединений с база ми данных. При первом запуске приложения предлагается создать соеди нение в диалоговом окне, изображенном на рис. 2.24. В дальнейшем соединения можно создавать с помощью команды New Connection.

После того как соединение создано, оно остается активным, пока не бу дет закрыто командой меню | Close Connection. Пароли не сохраняются в профилях соединений.

Среды разработки и выполнения Т S Login Server I User 1 Last Connect | Database: ( и 10/26/2001 2:22:49 PM EXAMPLE EXAMPLE 6:08:12 PM SYSTEM options Help Cancel | Рис. 2.24. Диалоговое окно соединения TOAD Способ установления соединений в TOAD уникален тем, что соедине ние, связанное с окном, можно изменять динамически. Это позволяет одновременно работать с несколькими серверами, поддержи вая при этом минимальное число окон. Однако конкретное рабочее окно можно связать только с одним сеансом.

Выполнение SQL и PL/SQL Операторы SQL и PL/SQL выполняются из окна редактирования SQL.

Окно SQL может содержать один или несколько операторов SQL или блоков PL/SQL, которые могут выполняться по отдельности или как Help в.0 * - © i * * AND course FOR OF LOOP UPDATE SET grade ' ' OF LOOP.

ESD.

• course • 410;

| | PL/SQL procedure successfully completed - AHD - 10009 410 A 25: Рис. 2.25. Выходные SQL 54 сценарий. Если инструкция является запросом, выходные данные выво дятся в нижней панели окна (см. рис. 2.25). Вкладка Script в ниж ней панели показывает результаты выполнения всего сценария. Для выполнения отдельных инструкций и блоков следует нажать на соответ ствующую кнопку в верхней части окна.

Окна редактирования SQL могут использоваться для показа выходных данных а также статистики и выходных данных плана объяснения. Аналогично команде SET ON, режим вывода результатов включается нажа тием кнопки на вкладке DBMS Output. Пример выходных данных показан рис. 2.26.

File Ed* find lock Help El В * - i i ! - i fe — — D | | | * I DBMS TO } j X j Plan ] Auto Trace DBMS Output j Code Statistics j Output ] Hello Today is 25 2 i with Commit is OFF i Рис. 2.26. Выходные данные DBMS_OUTPUT.PUT_LINE Средства отладки Для отладки хранимой процедуры следует нажать на кнопку Step Into или выбрать в меню Debug | Step Into. Предварительно нужно задать все пара метры процедуры в диалоговом окне Set Parameters. Если необходимо, процедура и все зависимые объекты будут сначала откомпилированы, а затем начнется сеанс отладки. При отладке можно задавать контрольные точки и точки прерывания, а также проверять значения локальных пере менных. Сеанс отладки показан на рис. 2.27.

Среды разработки и выполнения Hat CREATE OR FUNCTION ( Add F. p Course с IS v v v : DBMS Output SELECT v v FROM WHERE course TRUE;

Break | DBMS Output j v ReturnValue END v ReturnValue;

Scope I BO I Рис. 2.27. Сеанс отладки TOAD Дополнительные возможности В дополнение к рассмотренным средствам, TOAD предлагает следующие возможности:

Просмотр объектов. TOAD имеет два типа браузеров базы данных:

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

Окна редактирования. TOAD имеет два типа окон редактирова ния: окно редактирования SQL (см. выше) и окно редактирования хранимых процедур. Окна редактирования SQL используются для редактирования одиночных операторов SQL или сценариев SQL, в то время как окна редактирования хранимых процедур служат для редактирования хранимых процедур, функций, модулей и тригге ров. В окне редактирования хранимых процедур можно компилиро вать, выполнять и отлаживать процедуры, представленные в базе данных. Окна редактирования хранимых процедур могут загружать объекты базы данных или файлы либо могут использоваться для со здания новых объектов.

ГЛАВА • Шаблоны кода. TOAD может автоматически вводить конструкции PL/SQL и SQL на основе специальных комбинаций клавиш.

• Возможности DBA. TOAD имеет ряд средств, ценных для DBA. Сре ди них просмотр параметров базы данных и утилита SQL-Programmer Еще одним инструментом разработки с графическим интерфейсом поль зователя является SQL-Programmer, производимый компанией ВМС. Он предлагает следующие средства:

• Автоформатирование операторов PL/SQL и SQL • Отладчик PL/SQL • Средство просмотра базы данных • Поддержка объектных типов и объектов г т Шаблоны программного кода • Поддержка систем управления версиями, производимых другими компаниями • Создание сценариев для объектов баз данных Соединение с базами данных SQL-Programmer одновременно поддерживает несколько соединений с разными базами данных. Диалоговое окно соединения приведено на ВМС Edition - Login Help ! Connected Database Version 1 1 Name | as 8.17 Enterprise Edition Release Solaris V817 EXAMPLE i г Disconnect Server | | — ~ | Oracle Database Server | p Options Done j | | P Рис. 2.28. Диалоговое окно соединения SQL-Programmer разработки и выполнения 5?

рис. 2.28. Пароли не сохраняются в профилях соединений, однако раз решается сохранять разные профили для различных серверов. В окне показаны также текущие открытые соединения.

Выполнение SQL и PL/SQL Основное окно SQL-Programmer служит для работы с отдельными объек тами PL/SQL. Если щелкнуть мышью на определенном объекте, он будет открыт в SPDW (окно разработки SQL-Programmer). Различные SPDW имеют разные свойства в зависимости от типа обрабатываемого объекта.

Например, на рис. 2.29 показана процедура в SPDW. Нель зя непосредственно выполнять произвольные команды SQL и PL/SQL.

Можно, однако, создать пакетный объект, состоящий из нескольких команд, для последовательного выполнения. Пакетные объекты можно при желании хранить на сервере.

file Edit Vie Windows - ' '•• ADDNEWSTUDENT j VALID I Edit j j ] j Code | Results j Role ( Functions • Ml | | fiS • (ID, Java current credits) if) Views (student p p !

EHD Sequences * f l,r,l To Do List Module I | 19.• Рис. Диалоговое окно соединения SQL-Programmer Чтобы выполнить процедуру из SPDW, необходимо сначала задать ар гументы, передаваемые если таковые имеются. SQL-Program mer создаст анонимный блок для вызова процедуры. Аргументы для AddNewStudent показаны на рис. 2.30. Если процедура использует то для просмотра выходных данных нужно включить режим вывода (щелкнув на соответствующей кнопке) и затем вы процедуру. Выходные данные доступны на вкладке Result в SPDW, 58 ГЛАВА | | Code Results | User Auditing Name Type I In/Out Execute Has Ualue Chuck True na IN True IN Science True Рис. 2.30. Аргументы процедуры AddNewStudents Средства отладки Для отладки процедуры нужно нажать кнопку Step In или выбрать в меню Debug | Step In. Будет запущен сеанс отладки. Переменные можно перетас кивать из кода в окно просмотра с целью задания новых переменных для просмотра, а текущий стек выводится в нижней левой панели. На рис. 2. показан сеанс отладки.

Дополнительные возможности SQL-Programmer В дополнение к уже рассмотренным возможностям, SQL-Programmer предлагает следующие средства:

• Просмотр объектов. Окно SQL-Explorer позволяет просматривать объекты базы данных, отсортированные по схеме и типу объектов.

Если существует более одного активного соединения, SQL-Explorer дает возможность просматривать объекты любого соединения.

• Ошибки компиляции. Если процедура содержит ошибки компиляции, то SPDW покажет ошибки в панели ошибок ниже текста. Двойной щелчок мыши на определенной ошибке выделит соответствующий раздел кода в панели выше.

• Шаблоны кода. При создании нового объекта SQL-Explorer будет автоматически заполнять его с помощью соответствующего шабло на. Доступные шаблоны можно определить в меню Option.

• Создание сценариев. Интерфейс сценариев позволяет создать сце нарий для любой комбинации объектов базы данных. Этот сценарий будет содержать код для автоматического воссоздания объектов на любом другом сервере. Таким образом, сценарии предоставляют хо роший механизм для копирования отдельных объектов или всей схемы между базами данных.

Среды разработки и выполнения ' • - л. к Database ;

S Edit | | Arguments ] ] Code Metrics j j RETURN IS О Functions В ALMOSTFUI | Я Procedures i - S : ! S j i SELECT ! Java Sources classes i department = Department flHD ' IF / ;

ReturnUalue := TRUE;

ELSE I.I Code Frags To Do 7 Module | | Watch Variable | Value | Function J not 4 11 ] Remove J i, EXAMPLE Рис. Сеанс отладки PL/SQL Developer Последним рассматривается инструментальное средство разработки PL/SQL Developer компании Authomations. Оно предлагает сле дующие возможности:

• Автоформатирование операторов PL/SQL и SQL • Отладка PL/SQL • Просмотр базы данных • Поддержка объектных типов и объектов г • Шаблоны кода • Поддержка систем управления версиями от сторонних поставщи ков (с применением внешнего подключаемого модуля) • Прямая поддержка большинства команд Соединение с базой данных Диалоговое окно соединения PL/SQL Developer показано на рис. 2.32.

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

60 ГЛАВА Logon Database Connect as OK Cancel Рис. 2.32. Диалоговое окно соединения PL/SQL Developer Новое соединение можно создать, выбрав в меню Session | Log. Основное окно PL/SQL Developer показано на рис. 2.33. Браузер объектов находит ся в левой панели, а пространство справа используется для различных окон разработчика.

COM o;

- | + All Recent objects Functions CJ Q ffi О Package Types Q bodies CJ Java sources CJ Libraries О Directories CJ ffl CJ CJ Sequences CJ BE Q О Package Q Types Program units Л J P Рис. 2.33. Основное окно Выполнение и PL/SQL Предлагается несколько способов выполнения команд SQL и PL/SQL в PL/SQL Developer. Для модификации существующей процедуры нужно выбрать ее в браузере объектов и установить режим edit, в результате она будет выведена в окне программ. Можно использовать окно SQL для Среды разработки выполнения ввода одиночного оператора SQL или блока PL/SQL (без завершающего слэша). Окно команд выводит приглашение как в Можно использовать команды в дополнение к командам PL/SQL Deve loper. На рис. 2.34 показаны окно SQL и окно команд.

• Edit Debug fcjaao tt У I в •• | a * ч * - x | В :

SQL | i I | Enabled Ж О ! I ! Cl Granted EC Editor ] !

14 / ffl iS * ffi О ID COURSE Program 410 A Function 10011 A 10000 410 A Program Window - Edit SQL APR.HDG fi'M 0. • Mew Рис. 2.34. Окна выполнения Результаты DBMS_OUTPUT.PUT_LINE можно просмотреть на вкладке Output окна SQL или оперативно в окне команд.

Средства отладки Отладка хранимой процедуры производится в окне тестирования. Это окно позволяет определить параметры процедуры. Отладка запускается нажатием кнопки Start Debugging. Можно выполнять программу по ша гам, задавать точки прерывания, просматривать стек вызовов и задавать наблюдаемые переменные. На рис. 2.35 показан сеанс отладки.

Дополнительные возможности PL/SQL Developer В дополнение к уже рассмотренным свойствам, PL/SQL Developer под держивает следующие возможности:

• Браузер объектов. Позволяет просматривать все доступные объекты базы данных в зависимости от определенных пользователем фильтров.

В браузере можно редактировать, удалять и компилировать задан ный объект.

62 ГЛАВА US. COM File Macro Documents Help - а я a» - X 3 Test | - Functions I ' 1 s Reference BEGIN tc SELECT MDSYS.SDO.

ЛОТ) p MDSYS.SDO.

tv v THEN О Package units Function i Java source ! Call stack : 4 Program Window - Edit S Test • Script fu Я feeoiing...

Рис. 2.35. Сеанс отладки • Шаблоны кода. Браузер объектов содержит шаблоны для автомати ческой генерации новых объектов базы данных как типа PL/SQL, так и типа SQL. Шаблон будет предлагать для объекта различные па раметры, а затем создавать объект.

• Поддержка подключаемых модулей. PL/SQL Developer поддержи вает различные подключаемые модули с дополнительными функци ями. Несколько подключаемых модулей доступны на web-сайте в том числе модуль для поддержки управле ния исходным кодом.

• Доступ к профайлеру PL/SQL. Окна тестирования разрешают включать профилирование. После выполнения тестового прогона вкладка Profiler окна тестирования позволит проверить выходные данные • Запись макросов. Можно записать макросы для часто выполняемых команд, которые будут последовательно выполняться при запуске макроса.

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

Среды разработки и Итоги обсуждения инструментальных средств разработки В таблице 2.2 представлены возможности различных сред разработки PL/SQL. Рекомендуется опробовать каждый из инструментов, чтобы по смотреть, какой из них лучше соответствует потребностям разработки.

Дополнительную информацию о любой из этих утилит можно найти в оперативной справочной системе.

Таблица 2.2. Сравнение инструментальных средств разработки программ PL/SQL Средство Rapid SQL SQL TOAD PL/SQL Navigator Programmer Developer Поставка Вместе с За отдельную За отдельную За отдельную За отдельную За отдельную За отдельную сервером плату плату плату плату плату Графическая Нет Да Да Да Да Да Да среда Браузер Да Да Да Да Да объектов Шаблоны Нет Да Да Да Да Да Да программного кода Управление Нет Нет Да Да проектами Да Да Да Да Да Да программного кода Планирование Нет Нет Нет Нет Да заданий Управление Нет Да Да Да Да Да Доступно при версиями использовании дополнительных подключаемых модулей Поддержка В ограниченном В ограниченном Да Да Да Да Да типов данных объеме Java Необходимость Нет Да Да Нет Her Нет установки на сервере Поддержка Нет Да Нет Да Да Да Нет нескольких соединений Поддержка Нет Да Да Да Да Да Да отладки Поддержка Нет Нет Нет Нет Нет Да Нет отладки Java Нет Нет Поддержка Да Нет Да, Да с дополнительной установкой Типы файлов SQL, SQL, SQL, PL/SQL, SQL, PL/SQL, SQL, SQL, SQL, PL/SQL, Java, HTML Java HTML Java 64 Итоги В этой главе рассматривались различные среды, содержащие систему поддержки PL/SQL, и соответствующие прикладные модели. Также были исследованы шесть различных сред разработки PL/SQL, которые можно использовать для создания собственных программ PL/SQL. В гла ве 3 мы приступим к подробному обсуждению языка Базовые свойства PL/SQL ГЛАВА Основы PL/SQL 68 шагом является анализ синтаксиса, лежащего в основе PL/SQL. Синтаксические правила определяют способы создания конст рукций любого языка программирования, в том числе и PL/SQL. В этой главе рассматриваются составные части блока PL/SQL, поясняются спо собы объявления переменных и типы данных, приводятся базовые про цедурные конструкции, а также дается краткий обзор курсоров и подпрограмм. Кроме того, говорится о стиле программирования в PL/SQL и демонстрируются эффективные методы программирования, способствующие созданию понятного кода.

Все операторы PL/SQL являются либо процедурными, либо торами. (Следует различать два понятия: оператор (operator) — действие, которое может быть выполнено над одним или несколькими операндами для получения результата, и процедурный либо (statement) — команда (группа команд), используемая для создания программ на языке PL/SQL. — пер.) В состав процедурных операторов входят объявления переменных, вызовы процедур и циклические конструкции. SQL-операторы используются для организации доступа к базам данных. Предметом рас этой главы и главы 7 являются процедурные операторы PL/SQL, а в главах 4, 5 и 6 исследуются SQL-операторы.

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

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

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

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

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

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

Ниже приводится анонимный блок PL/SQL, с помощью которого в таблицу вводятся две строки, затем они выбираются и отобра жаются на экране. Пример представлен в виде сеанса Этот пример содержится в файле SQL> DECLARE 2 /* переменные, используемые в этом блоке. */ 3 NUMBER := 1;

4 v_Num2 NUMBER := 2;

5 v_String1 VARCHAR2(50) := 6 v_String2 VARCHAR2(50) := 7 - This message brought to you by 8 VARCHAR2(50);

9 BEGIN 10 /* Используя значения переменных, введем две строки в 11 таблицу temp_table. */ 12 INSERT INTO (num_col, 13 VALUES v_String1);

14 INSERT INTO 15 VALUES (v_Num2, v_String2);

17 /* Теперь запросим в две только что введенные строки и 18 при помощи модуля выведем их на экран. */ 19 SELECT char_col 20 INTO 21 FROM tempjtable 22 WHERE = 25 SELECT char_col 26 INTO 27 FROM 28 WHERE = 31 /* Отменим изменения 32 ROLLBACK;

33 END;

Hello World!

- This message brought to you by PL/SQL!

PL/SQL procedure successfully completed.

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

Чтобы дать блоку имя, нужно указать перед ключевым словом метку, как показано в следующем примере. При желании можно разместить метку и после ключевого слова END.

••- Этот пример содержится в файле SQL> 2 DECLARE 3 /* Объявляем переменные, используемые в этом блоке. */ 4 NUMBER := 5 v_Num2 NUMBER := 2;

6 v_String1 VARCHAR2(50) := 7 v_String2 VARCHAR2(50) := message you 8 by 9 v_OutputStr VARCHAR2(50);

10 BEGIN 11 /* Используя значения переменных, введем две строки в 12 таблицу */ 13 INSERT INTO char_col) 14- VALUES 15 INSERT INTO char_col) 16 VALUES v_String2);

18 Теперь запросим в две только что введенные строки и 19 с модуля DBMS_OUTPUT выведем их на экран. */ 20 SELECT char_col 21 INTO 22 FROM 23 WHERE = 26 SELECT char._col INTO 28 FROM 29 WHERE = v_Num2;

Основы PL/SQL 32 /* Отменим изменения */ 33 ROLLBACK;

35 END 36 / Hello World!

- This message brought to you by PL/SQL!

PL/SQL procedure successfully completed.

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

Г) -- Этот пример содержится в файле CREATE OR REPLACE PROCEDURE AS /* Объявляем переменные, используемые в этом блоке. */ NUMBER := 1;

NUMBER := 2;

v_String1 VARCHAR2(50) := v_String2 VARCHAR2(50) := '-- This message brought to you by VARCHAR2(50);

BEGIN /* Используя значения переменных, введем две строки в таблицу */ INSERT INTO temp_table VALUES v_String1);

INSERT INTO char_col) VALUES v_String2);

/* Теперь запросим в две только что введенные строки и с помощью модуля DBMS_OUTPUT выведем их на экран. */ SELECT char_col INTO v_OutputStr FROM temp_table WHERE = DBMS_OUTPUT.PUT_LINE(v_OutputStr);

SELECT INTO v_OutputStr FROM WHERE /* Отменим изменения */ ROLLBACK;

END InsertlntoTemp;

72 ГЛАВА После создания процедуры можно вызывать ее с помощью анонимно го блока следующим образом:

I -- Этот пример содержится в файле SQL> BEGIN 3 END;

4/ Hello World!

- message brought to you by PL/SQL!

PL/SQL procedure successfully completed.

Более подробно о создании и вызове хранимых подпрограмм расска зывается в главах 9 и 10.

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

Г) ••- Этот пример содержится в файле CREATE OR REPLACE TRIGGER BEFORE INSERT OR UPDATE OF ON FOR EACH ROW BEGIN IF < 0 THEN insert a positive END IF;

END OnlyPositive;

Этот триггер будет срабатывать всякий раз, когда вызывается INSERT или UPDATE для таблицы temp_table. Следующий сеанс показы вает несколько успешных и неуспешных операций:

Этот пример содержится в файле -- Этот INSERT будет успешным, так как значение положительное SQL> INSERT INTO 2 is row 1 row created SQL> - Этот INSERT будет неуспешным, так как значение отрицательное SQL> INSERT INTO char_col) 2 VALUES (-1, is row INSERT INTO ERROR at line Please insert a positive value at line ORA-04088: error during execution of trigger Основы PL/SQL Базовая структура блока Каждый блок состоит из трех различных разделов: раздела объявлений, выполняемого раздела и раздела исключительных ситуаций. Обязателен только выполняемый раздел;

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

-- Этот пример содержится в файле DECLARE /* Начало раздела */ := 10000;

- Числовой переменной - присваивается значение 10000.

VARCHAR2(20);

- Строка символов переменной длины с максимальной длиной 20.

BEGIN /* Начало выполняемого раздела */ -- Извлекаем имя студента, идентификатор которого равен 10000.

SELECT INTO FROM students WHERE id = EXCEPTION /* Начало раздела исключительных ситуаций */ WHEN THEN •- Обрабатываем ошибку.

INSERT INTO log_table (info) VALUES does not END;

Внимание В этом примере используются две дополнительные таблицы, которые создаются при помощи students и Напомним, что полное описание схемы, применяемой в качестве примера, дается в главе В разделе объявлений размещаются объявления всех переменных, курсо ров и типов, используемых данным блоком. В этом разделе могут быть объявлены также локальные процедуры и функции. Такие подпрограммы будут доступны только в пределах блока. В выполняемом разделе осуществ ляется работа блока. В этом разделе могут находиться как процедурные, так и SQL-операторы. Ошибки обрабатываются в разделе исключительных в нем программный код не будет выполняться, если не возникнет ни одной ошибки. Компоненты разделов объявлений и выполнения рассматриваются в этой главе и в главах 4 — 6. Исключитель ные ситуации, а также способы их использования для распознавания и об работки ошибок обсуждаются в главе 7.

Разделы блока ограничиваются ключевыми словами DECLARE (объ явить), BEGIN (начало), EXCEPTION (исключительная ситуация) и END (конец). Кроме того, в конце блока необходимо ставить точку с запятой, это синтаксическое правило обязательно для блока. Таким образом, структура анонимного блока имеет вид:

74 ГЛАВА DECLARE /* Раздел объявлений */ BEGIN /* Выполняемый раздел */ EXCEPTION /* Раздел исключительных ситуаций */ END;

Внимание При создании процедуры ключевое слово DECLARE необязательно. Более того, его использование будет ошибкой. Однако DECLARE требуется при создании триггера (см. главы Если раздел объявлений отсутствует, выполнение блока начинается с ключевого слова BEGIN. Если отсутствует раздел исключительных ситуа ций, ключевое слово EXCEPTION пропускается и блок заканчивается ключевым словом END и точкой с запятой. Таким образом, структура блока, состоящего только из выполняемого раздела, будет выглядеть так:

BEGIN /* Выполняемый раздел */ END;

Блок с разделом объявлений и выполняемым разделом, но без раздела исключительных ситуаций будет выглядеть следующим образом:

DECLARE /* Раздел объявлений */ BEGIN /* Выполняемый раздел */ END;

Внимание | В приведенных блоках в /* и */, являются комментариями (см. ниже).

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

••- Этот пример содержится в файле DECLARE /* Начало раздела объявлений */ NUMBER(5) := 10000;

-•- Числовой переменной присваивается - значение VARCHAR2(20);

•- Строка символов переменной длины -- с максимальной длиной BEGIN /* Начало раздела выполнения Основы PL/SQL - имя студента, идентификатор которого равен SELECT INTO FROM students WHERE id = v_StudentID;

- Начало вложенного блока, который содержит только раздел выполнения BEGIN INSERT INTO log_table(info) from a nested block!

END;

EXCEPTION /* Начало раздела обработки исключительных ситуаций */ WHEN NO THEN •- Начало блока, который содержит разделы выполнения - и обработки исключительных ситуаций BEGIN - Обработка ошибочного условия INSERT INTO log_table(info) 10,000 does not exist! ');

EXCEPTION WHEN OTHERS THEN - Что-то делается неправильно при выполнении INSERT inserting into log_table!

END;

END;

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

Этот набор включает в себя символы:

• Буквы верхнего и нижнего регистров: А — Z и а — z • Цифры: 0- • Разделители: символы табуляции, пробелы и символы возврата ка ретки • Математические символы: = • Символы пунктуации: () {} [] ? ! - @ # % $ _ | В программе PL/SQL может быть использован любой символ, но толь ко из этого набора. Подобно SQL, PL/SQL не учитывает регистр симво лов. Иначе говоря, буквы верхнего и нижнего регистров эквивалентны.

Это правило не распространяется на строки символов, заключенные в кавычки.

Лексические единицы подразделяются на идентификаторы, ограни чители, литералы и комментарии.

76 ГЛАВА Идентификаторы Идентификаторы используются для именования объектов PL/SQL, таких как переменные, курсоры, типы и подпрограммы. Идентификатор начи нается с буквы, за которой может следовать любая последовательность символов, состоящая из букв, цифр, знаков доллара, знаков подчеркива ния и знаков #. Другие символы запрещены. Максимальная длина иденти фикатора — 30 символов, причем все они являются значащими. Ниже приводится ряд разрешенных идентификаторов:

v v2_ А эти идентификаторы недопустимы:

G Запрещенный символ + - Идентификатор должен начинаться - с буквы, а не со знака подчеркивания First Name - Запрещенный пробел - Более 30 символов 1_variable - Идентификатор не может •- начинаться с цифры PL/SQL не учитывает регистр символов, поэтому для PL/SQL следую щие идентификаторы эквивалентны:

Г) ROOM_DESCRIPTION Хорошим стилем программирования считается создание наглядных идентификаторов и корректной схемы именования (см.

Зарезервированные слова Многие идентификаторы, называемые зарезервированными (или ключевы ми) словами, имеют в PL/SQL особое значение. Использовать эти слова для именования собственных идентификаторов нельзя. Например, клю чевые слова BEGIN и END применяются для ограничения блоков PL/SQL, поэтому их нельзя использовать в качестве имен переменных.

Ниже приводится недопустимый раздел объявлений, так как begin явля ется зарезервированным словом. При обработке этого раздела будет вы дано сообщение об ошибке компиляции:

Г) DECLARE begin NUMBER;

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

DECLARE v_BeginDate DATE;

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

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

"A number" "Linda's variable" Максимальная длина идентификаторов в кавычках также равна 30 сим волам (без учета кавычек). В состав идентификатора в кавычках может входить любой печатный символ, за исключением двойных кавычек.

Идентификаторы в кавычках полезны в случае необходимости исполь зовать зарезервированное слово PL/SQL в SQL-операторе. В PL/SQL за резервировано больше слов, чем в SQL (см. приложение А). Например, обратиться с запросом к таблице, содержащей столбец exception (заре зервированное можно так:

Г) DECLARE v_Exception BEGIN SELECT "EXCEPTION" INTO v_Exception FROM exception_table;

END;

Обратите внимание, что слово "EXCEPTION" написано прописными буквами. Все объекты Oracle хранятся в словаре данных в верхнем реги стре, если только идентификатор не создан явным образом (оператором CREATE) как идентификатор в кавычках с помощью символов нижнего регистра. Строки двойных кавычек являются зависимыми от ре гистра символов, поэтому "EXCEPTION" также должно быть записано в верх нем регистре.

Использование зарезервированных слов в качестве идентификаторов не запрещено, но считается плохим стилем программирования и затруд няет понимание программы. Оно может потребоваться в единственном 78 ГЛАВА случае, когда в таблице базы данных зарезервированное слово PL/SQL применяется как имя некоторого столбца. Поскольку в PL/SQL больше зарезервированных слов, чем в SQL, в таблице может содержаться стол бец, имя которого является зарезервированным словом PL/SQL, но не является таковым в SQL. Подобную ситуацию и иллюстрирует таблица exception_table из предыдущего примера.

Совет Хотя таблица вполне может использоваться в PL/SQL, рекомендуется переименовать некорректный столбец. Если определение таблицы изменить нельзя, в качестве альтернативы можно создать представление, в котором данный столбец будет иметь другое имя. Затем это представление можно использовать в PL/SOL. Для примера предположим, что таблица exception_table создана следующим образом:

CREATE TABLE ( exception VARCHAR2(20), С учетом этого можно создать представление:

CREATE AS SELECT exception FROM exception_table;

Теперь вместо таблицы можно использовать представление и на рассматриваемый столбец можно ссылаться как на что не является зарезервированным словом.

Ограничители Ограничители — это символы (один символ или их которые имеют специальное значение в PL/SQL. Они применяются для отделения идентификаторов друг от друга. Список ограничителей PL/SQL приведен в таблице Таблица Ограничители PL/SQL Символ Описание Символ Описание Знак операции сложения Знак операции вычитания Знак операции умножения / Знак операции деления Знак операции "равно" Знак операций "меньше" Знак операции "больше" ( Ограничитель начала выражения ) Ограничитель конца выражения ;

Признак конца оператора % Индикатор атрибута, Разделитель элементов Выбор компонента @ Указатель соединения баз данных Основы PL/SQL Таблица 3.1. Ограничители PL/SQL (продолжение) Символ Описание Символ Описание Ограничитель последовательности Ограничитель строки в кавычках символов : Указатель переменной привязки Знак операции возведения в степень Знак операции "не равно" != Знак операции "не равно" (эквивалентен <>) Знак операции "не равно" Знак операции "не равно" (эквивалентен !=) (эквивалентен "=) <= Знак операции "меньше >= Знак операции "больше или равно" или равно" := Знак операции присваивания => Знак операции ассоциации Знак операции диапазона Знак операции соединения (конкатенации) строк Ограничитель начала метки Ограничитель конца метки Указатель однострочного /* Указатель начала многострочного комментария комментария */ Указатель конца многострочного Пробел комментария Символ табуляции Возврат каретки или новая строка Литералы Литерал — это символьное, числовое или логическое которое не является идентификатором, например -23.456 и NULL. Логические, символьные и числовые типы рассматриваются ниже в разделе "Типы PL/SQL".

Символьные литералы Символьные литералы (называемые также строковыми) состоят из одно го или нескольких символов, заключенных в одиночные кавычки. (Это такой же стандарт, как и Символьные литералы могут быть присво ены переменным, имеющим типы CHAR и без преобразова. Например, ниже приведены корректные символьные литералы:

score and seven years Считается, что все строковые литералы имеют тип CHAR. Частью ли терала может быть любой печатный символ из набора символов PL/SQL, в том числе и одиночная кавычка. включить одиночную кавычку в строковый литерал, нужно расположить две одиночные кавычки рядом 80 друг с другом. Например, превратить строку "Mike's string" в литерал сле дует так:

Следовательно, в PL/SQL строка, состоящая лишь из одной кавычки, будет выглядеть следующим образом:

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

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

Целые литералы состоят из перед которыми может идти знак + или В таких литералах запрещается указывать десятичную точку. Ниже приведены правильные целые литералы:

+ О Действительные литералы состоят из цифр (с указанием десятичной перед которыми может быть указан знак + или -. Например:

-17. 23. 3.

Хотя значения 23.0 и 3. фактически не содержат дробной части, они тем не менее считаются в PL/SQL действительными литералами. При же лании действительные литералы могут быть записаны в ной форме. Следующие действительные литералы являются допустимыми:

Г] 1.345Е Основы PL/SQL После Е или е можно указывать только целый литерал. Е означает "экс понента", т.е. "умножить на 10 в степени Таким образом, приведенные выше три значения можно представить как:

= умножить на 10 в степени = х 10 000 000 = 13 450 = умножить на 10 в степени -3 = х.001 = = умножить на 10 в степени = х 1 000 000 000 000 = -7 120 000 000 Внимание 6 зависимости от настройки для разделения целой и дробной частей действительного литерала могут использоваться другие символы (такие, как запятая).

Дополнительную информацию об этом можно найти в документации Oracle NLS. NLS в называется глобализацией.

Логические литералы Существуют только три логических литерала: TRUE (истина), FALSE (ложь) и NULL. Эти значения могут быть присвоены лишь логическим (бу левым) переменным. Логические литералы обозначают истинность или ложность некоторых условий и используются в операторах IF и LOOP.

Комментарии Комментарии повышают удобочитаемость программ и делают их более по нятными. Компилятор PL/SQL игнорирует комментарии. Существуют комментарии двух видов: однострочные и многострочные. Последние час то называют комментариями С-типа.

Однострочные комментарии Однострочный комментарий начинается с двух символов тире и про должается до конца строки (ограниченной символом возврата каретки).

Рассмотрим некоторый блок PL/SQL:

- Этот пример является частью файла DECLARE CHAR(3);

NUMBER;

BEGIN INSERT INTO classes (department, course) VALUES END;

Теперь добавим к этому блоку однострочные комментарии, чтобы лать его более понятным:

— Этот пример является частью файла DECLARE 82 ГЛАВА v CHAR(3);

Переменная для хранения трехсимвольного - кода факультета NUMBER;

- Переменная для хранения номера курса BEGIN - Введем в таблицу classes базы данных курс, указанный в - и INSERT INTO classes (department, course) VALUES END;

Внимание Если комментарий распространяется более чем на одну строку, то двойное тире необходимо указывать в начале каждой строки.

Многострочные комментарии Многострочные комментарии начинаются с ограничителя /* и заканчи ваются ограничителем */, как это делается в языке программирования С.

Например:

— Этот пример является частью файла DECLARE CHAR(3);

/* Переменная для хранения трехсимвольного кода факультета */ v_Course NUMBER;

/* Переменная для хранения номера курса */ BEGIN /* Введем в таблицу classes базы данных курс, указанный в v_Department и v_Course. */ INSERT INTO classes (department, course) VALUES v_Course);

END;

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

Г) -- Этот пример является частью файла BEGIN /* Это комментарий. Если начать другой комментарий /* вот так */, это будет неправильно.

NULL;

Совет В принципе, внутри комментария может содержаться Проблему вызовет вложенный закрывающий */, поскольку он завершит комментарий.

Основы PL/SQL Объявление переменных В блоках PL/SQL взаимодействие с базой данных осуществляется посред ством переменных. (variables) — это области памяти, в которых могут храниться некоторые значения данных. По мере выполнения про граммы содержимое переменных модифицируется. Переменной может быть присвоена определенная информация, хранимая в базе данных, либо содержимое переменной может быть внесено в базу данных. Переменные могут изменяться непосредственно командами PL/SQL. Переменные определяются в разделе объявлений блока. Каждая переменная имеет кон кретный тип, описывающий тип хранящейся в ней информации.

Синтаксис объявления Переменные определяются в разделе объявлений блока. Общий синтак сис объявления переменных:

тип [CONSTANT] [NOT NULL] [:= где — это имя переменной, тип — это тип, а значение — на чальное значение переменной. Ниже приведены примеры корректного объявления переменных:

DECLARE v_Description VARCHAR2(50);

NUMBER 45;

BINARY_INTEGER := 0;

В качестве имени переменной может быть использован любой разре шенный идентификатор PL/SQL. Типы VARCHAR2, NUMBER и BINARY_INTEGER допустимые типы PL/SQL. В этом примере для переменных и v_Counter заданы начальные значения соответственно 45 и 0. Если нача льное значение переменной, например v_0escription, не задано (она не инициализирована), по умолчанию ей присваивается NULL. Если в объяв лении указано NOT NULL, переменная должна быть инициализирована.

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

DECLARE NUMBER NOT NULL;

Это можно исправить, если присвоить значение по умолча нию, например:

Г) DECLARE vJempVar NUMBER NOT NULL := 0;

Если в объявлении переменной указано CONSTANT, то она должна быть инициализирована и ее начальное значение не может быть 84 ГЛАВА изменено. Константная переменная рассматривается в блоке в качестве переменной "только для чтения". Константы часто используются для хра нения тех значений, которые известны к моменту создания блока, например:

DECLARE CONSTANT := 10000;

При желании вместо := можно воспользоваться ключевым словом DEFAULT (по умолчанию). Например:

DECLARE NUMBER DEFAULT 45;

v_Counter BINARY_INTEGER DEFAULT 0;

VARCHAR2(20) DEFAULT В разделе объявлений в одной строке может быть описана только одна переменная. Нижеприведенный раздел неверен, так как в одной и той же строке объявляются две переменные:

DECLARE VARCHAR2(20);

Корректный вариант этого блока:

DECLARE VARCHAR2(20);

VARCHAR2(20);

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

Это считается некорректным стилем программирования;

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

В PL/SQL информация, содержащаяся в неинициализированной пе определяется — такой переменной присваивается NULL.

NULL означает "пропущенное или неизвестное значение", поэтому впол не логично, что NULL по умолчанию присваивается любой неинициали зированной переменной. Это свойство присуще PL/SQL. Во многих языках программирования (в том числе в С и Ada) значения для неиници ализированных переменных не определяются. Некоторые языки (напри мер, Java) требуют инициализации всех переменных.

Типы PL/SQL В PL/SQL имел три категории типов: скалярные, составные и ссылочные. В определены две дополнительные категории — LOB и объектные типы. Скалярные типы не содержат в себе никаких компо нентов, в то время как в типах они присутствуют. Ссылочный Основы PL/SQL СКАЛЯРНЫЕ ТИПЫ Семейство числовых типов: Семейство символьных типов:

Семейство временных типов:

DATE BINARY INTEGER CHAR INTERVAL DAY TO DEC CHARCTER INTERVAL YEAR TO DECIMAL LONG TIMESTAMP DOUBLE PRECISION TIMESTAMP WITH TIME ZONE FLOAT TIMESTAMP WITH LOCAL TIME INT STRING INTEGER VARCHAR NATURAL NATURALN NUMBER Семейство Rowid: Семейство логических типов:

NUMERIC BOOLEAN INTEGER UROWID POSITIVE POSITIVEN Семейство Raw:

Семейство типов Trusted:

REAL RAW LONG RAW ТИПЫ LOB ССЫЛОЧНЫЕ ТИПЫ ОБЪЕКТНЫЕ ТИПЫ СОСТАВНЫЕ ТИПЫ Объектный RECORD NESTED Объектный тип INDEX-BY TABLE Этот тип доступен в и выше Этот тип доступен в и выше Этот тип доступен в Oracle9i и выше Типы PL/SQL тип является указателем на другой тип. На рис. 3.1 приведен список всех типов PL/SQL.

Типы PL/SQL определены в модуле под названием STANDARD. Обра титься к содержимому этого модуля можно из любого блока PL/SQL. По мимо типов, в модуле STANDARD определены встроенные SQL-функции и функции доступные в PL/SQL.

Скалярные типы К допустимым скалярным типам относятся типы, аналогичные тем, что применяются для определения столбцов таблиц базы данных, плюс ряд дополнительных типов. Скалярные типы можно разделить на семь се мейств: числовые типы, символьные типы, типы RAW, временные типы, типы логические типы и типы Trusted.

Семейство числовых типов При помощи типов этого семейства хранятся целые и действительные значения. Существуют три базовых типа: NUMBER, PLS_INTEGER и В переменных, имеющих тип NUMBER, можно 86 ГЛАВА сохранять как целые, так и действительные величины, а в переменных типа и - только целые числа.

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

NUMBER где точность (precision), a 5— масштаб (scale). Точность — это количе ство цифр в значении, а масштаб — количество цифр справа от десятичной точки. Использование как точности, так и масштаба необязательно, одна ко при указании масштаба необходимо указывать и точность. Различные комбинации точности и масштаба продемонстрированы в таблице 3.2.

Таблица 3.2. Значения точности и масштаба Объявление Присвоенное значение Хранимое значение NUMBER 1234.5678 1234. 123 NUMBER(3) 1234 Ошибка — превышение точности 123.4567 Ошибка — превышение точности 1. 12345.67 12345. -3) масштаб присваиваемого значения превышает то сохраняемое значение округляется до числа цифр, указанного в масштабе.

Pages:     || 2 | 3 | 4 | 5 |   ...   | 7 |



© 2011 www.dissers.ru - «Бесплатная электронная библиотека»

Материалы этого сайта размещены для ознакомления, все права принадлежат их авторам.
Если Вы не согласны с тем, что Ваш материал размещён на этом сайте, пожалуйста, напишите нам, мы в течении 1-2 рабочих дней удалим его.