Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Секция объявлений




Раздел заголовка

Структура блока PL/SQL

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

Структура блока определяется следующей синтаксической конструкцией:

 

[CREATE OR REPLACE имя [(параметр тип_данных [, параметр тип_данных … ])

{IS | AS}] --раздел заголовка

[[DECLARE]

переменная тип_переменной;

[переменная тип_переменной;…]] --раздел объявлений

BEGIN

выполняемый_код;

[выполняемый_код;...] --раздел выполнения

[EXCEPTION

код_исключения;

[код_исключения;….]] --раздел исключений

END;

 

Назначение секций:

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

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

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

- раздел исключений. Определяет обработку исключений. Может отсутствовать.

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

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

 

BEGIN

NULL;

END;

В секции заголовка указывается имя блока PL/SQL или программного модуля. Наличие или отсутствие этой секции определяется типом блока PL/SQL.

Есть два основных типа блоков:

1) Анонимный блок создается динамически и выполняется только один раз. Как правило, такой блок создается в клиентской программе для вызова подпрограмм, хранящихся в БД, и не может быть вызван из-за пределов содержащего его блока. Необязательная секция объявлений начинается ключевым словом DECLARE. Анонимный блок имеет вид:

 

DECLARE

Today DATE DEFAULT SYSDATE;

BEGIN

--Вывести дату

DBMS_OUTPUT.PUT_LINE (‘Сегодня’|| today);

END;

 

2) Именованный блок может быть разделён на 3 подвида:

- помеченные блоки – это анонимные блоки с меткой. Метка позволяет ссылаться на переменные, которые иначе были бы недоступны. Метка задается перед ключевым словом DECLARE или после ключевого слова END.

пример

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

 

CREATE OR REPLACE PROCEDURE show_the_date

IS

Today DATE DEFAULT SYSDATE;

BEGIN

--вывести дату

DBMS_OUTPUT.PUT_LINE(‘сегодня’||today);

END show_the_date;

 

- Триггеры – именованные блоки, которые ассоциируются с некоторым событием, происходящим БД. Обычно не изменяются и выполняются многократно неявным образом при наступлении соответствующих событий (INSERT, UPDATE, DELETE, CREATE, ALTER, DROP, запуск и останов сеанса работы с БД и др.).

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

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

Синтаксис определения параметров:

 

имя_параметра [ назначение ] [NOCOPY] тип_данных [(:=|DEFAULT | значение)]

 

Ключевые слова

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

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

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

IN OUT – параметр для чтения и записи. Значение фактического параметра передается в процедуру при ее вызове. Внутри процедуры формальный параметр рассматривается как инициализированная переменная, при чем можно как записать в него значение, так и считать значение из него.

Если в ходе выполнения процедуры или функции возникают исключения, то исключения, присвоенные параметрам типа OUT и IN OUT теряются, если только не дана подсказка NOCOPY.

NOCOPY – это подсказка компилятору использовать передачу параметра по ссылке, а не по значению. По умолчанию PL/SQL передаёт параметр типа IN OUT по значению, создавая его копию в подпрограмме. Когда параметр содержит много данных для передачи, например, является коллекцией или объектом, то такое копирование замедляет работу, требует много памяти. NOCOPY указывает PL/SQL, что параметр передаётся по ссылке при помощи указателя на единственный экземпляр параметра. Недостаток применения NOCOPY в том, что при возникновении исключения в процессе выполнения программы, которая изменяет параметр типа OUT или IN OUT значения реальных параметров не откатываются, т.к. они передавались по ссылке, а не по значению.

тип_данных – может быть любым типом данных PL/SQL или пользовательским типом, может быть ограничен в размере. Фактический размер параметра определяется вызывающей программой или ограничением %TYPE.

 

CREATE OF REPLACE PROCEDURE empid_to_name

(in_id emp.emp_id%TYPE; --компилируется успешно

, out_last_nаme VARCHAR2; --компилируется успешно.

, out_first_name VARCHAR2(10); --не компилируется.

) IS

Длина out_last_name и out_first_name определяется вызывающей программой:

 

DECLARE

surname VARCHAR2(10);

first_name VARCHAR2(10);

BEGIN

Empid_to_name(10, surname, first_name);

END;

 

DEFAULT – указывает значение по умолчанию для входного (IN) параметра. Если входной параметр имеет значение по умолчанию, то можно не указывать его значение явно при вызове программы. Если при вызове значение не указано, автоматически будет поставлено значение по умолчанию.

Следует различать формальные и фактические параметры. Формальные параметры – это имена, объявляемые в заголовке процедуры или функции, а фактические – это значения или выражения, помещаемые в список параметров при вызове функции или процедуры.

 

 

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

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

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

 

имя_переменной тип_данных [CONSTANT] [NOT NULL]

[{:=| DEFAULT} начальное_значение ]

 

Сразу после объявления переменной ей по умолчанию присваивается значение NULL. Инициализация всех переменных – характерная черта PL/SQL, этим он отличается от таких языков как C и Ada. Инициализировать переменную значением отличным от NULL, позволяет оператор присваивания или указание ключевого слова DEFAULT:

 

counter BINARY_INTEGER:=0;

priority VARCHAR2(8) DEFAULT ‘LOW’;

 

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

При объявлении констант (которое осуществляется добавлением ключевого слова CONSTANT) необходимо указать начальное значение, которое в дальнейшем не может быть изменено, например:

 

Min_order_qty NUMBER (1) CONSTANT:=5;

 

Объявления с ограничениями и без ограничений.

Указания на тип данных может содержать ограничение, а может не содержать. Ограничение заключается в указании допустимого размера, масштаба или точности, не превышающих соответствующие значения для ограниченного типа. Например

total_sales NUMBER(15,2);--Есть ограничение.

emp_id VARCHAR2(9);--Есть ограничение.

company_number NUMBER; --Нет ограничения.

book_title VARCHAR2; --Ошибка.

Данные, объявленные с ограничениями, занимают меньше места, чем не ограниченные. Не все типы данных могут быть указаны без ограничений. Например, нельзя объявить переменную с типом VARCHAR2 – необходимо указать её максимальный размер.

Закреплённые объявления типов (Использование атрибутов). Для того чтобы закрепить (anchor) тип данных скалярной переменной (которая держит одно значение) за другой переменной или столбцом таблицы или представления БД, применяется атрибут % TYPE. Атрибут %ROWTYPE позволяет закрепления объявление за курсором или таблицей.

При объявлении переменной (но не в определении столбца) инструкция NOT NULL может следовать за закреплением типа, в этом случае необходимо, чтобы объявления типов содержали значения по умолчанию. Значение по умолчанию для закреплённого объявления может отличаться от значения по умолчанию основного объявления.

 




Поделиться с друзьями:


Дата добавления: 2013-12-12; Просмотров: 318; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.012 сек.