Здавалка
Главная | Обратная связь

Процедуры и функции



 

Процедуры и функции написанные на языке SQL во многом схожи с такими же понятиями в других языках. Процедура сначала:

1. создается при помощи Create or replace procedure

2. компилируется

3. сохраняется в скомпилированном виде в б.д.

4. при вызове процедуры ей можно передавать параметры

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

Объявление процедуры

Create [ or replace] procedure имя процедуры

[ ( аргумент [{ in /out/ in out}] mun, тип аргумента, аргумента 2┘┘)]

{is/ AS}

пример

Create or replace procedure p in cena avto

P √ name in out cena avto. Name % type;

P √ god in out number;

P √ probeg in out number;

P √ ctna in out number; as

Begin

Insert into cena avto (name, god, probeg, cena)

Values (pname, pgod, pprobeg, pcena);

End

┘┘┘┘┘

exception p in cena avto (▒volga▓,2003,0,210.000);

 

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

in(в) out(из) in out (в,из)

Если вид не указан то по умолчанию in

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

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

in out-значение фактического параметра передается в процедуру при ее вызове. Внутри процедуры формальные параметры могут использованы толь для чтения. При завершении работы процедуры содержание формальных параметров присваиваться фактическим

Тело процедуры это блокPL\SQL, который содержит раздел объявлений, выполняемый раздел и раздел исключ. ситуаций. Раздел объявлений располагается между ключевым словам is\as и Begin. Выполняемый раздел - между Begin и exception. Раздел исключ. ситуаций √ exception и end.

 

Функция

 

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

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

Объявление функции

Create [ or replace] function имя функции

[ ( аргумент [{ in /out/ in out}] mun, аргумент [{ in /out/ in out}] mun)]

return возвращаемый тип {is/ AS}

тело функции

Внутри тела функции оператор return применяется для возврата результата работы функцию в вызванную среду

Return выражение, где выражение есть возвращаемое значение

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

Create or replace function имя функции (

F √ name ctna-avto. Name % type,

F √ god ctna-avto. Name % type,

F √ cena ctna-avto. Name % type)

Return varchar 2 is

Begin

Return F √ cena + 1000;

End;

 

Курсоры.

 

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

Кроме того, обычно клиент работает с небольшой частью данных в определенный момент времени, например с одной строкой, а не со всем набором строк.

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

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

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

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

1. число строк, обработанных оператором

2. указатель на представление этого оператора

3. активный набор (набор строк, возвращение запросом).

Курсор - это указатель на контекстную область, с помощью которого PL SQL может управляться контекстной областью и ее состоянием во время обработки оператора.

Курсор - разновидность файла, которая создается во время.

Это средство погруженного SQL хранения результатов для дальнейшей обработки.

Для использования курсоров надо:

1. объявить курсор

2. открыть курсор для запроса

3. выбрать результаты в переменные PL SQL

4. закрыть курсор

1.Объявление курсора.

При объявлении курсора ему назначается имя и ставится в соответствие некоторой Select.

Cursor имя курсора IS оператор Select

Курсор должен быть объявлен (описан) до того, как на него будет произведена ссылка в нем, можно использовать любые оператор Select, в том числе соединение (joins), объединение (union), вычитание (minus).

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

Declare

V - probeg cena √ avto. probeg % type;

V - cena cena √ avto. Ceno % type;

Объявление курсора : cursor c √ cena is

Select from cena √ avto where cena = v √ cena;

Begin

V √ cena: = 2000;

Open c √ cena;

End.

2. Открытие курсора.

Open - имя курсора.

Позволяет СУБД обработать запрос курсора и записать результат в ╚курсор╩.

При открытии курсора происходит:

1. анализируется значения переменных привязки

2. на основе значений переменных привязывается определенный активный набор (т.е. набор строк, возвращаемый запросом)

3. указатель активный: наборы устанавливаются на одну строку.

Чтобы переменным привязки присвоить новые значения и курсор, работая с ними надо курсор закрыть, присвоить переменной привязки новые значения и снова открыть курсор.

3. Выбрать данные для обработки (считывание строк из курсора).

FETCH - имя курсора INTO √ список переменных

FETCH имя курсора INTO запись PL/SQL

С помощью оператора FETCH считывается 1 строка из курсора. Тип переменной курсора должен соответствовать переменной выбора запроса.

В случае если считывание идет в запись PL/SQL, то переменная типа запись объявляется

V √ cur cena √ avto % ROWTYPE

4. Закрытие курсора.

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

Курсорные атрибуты.

Добавляются к имени курсора в блоке PL/SQL подобно атрибутам % type и % nowtype.

1. % found √ возвращает значение TRUE если строка была выбрана RALSE если не выбрана строка.

2. % notfound √ противоположно % found

3. % open используется для определения открыт или нет соответствующий курсор. Если открыт - TRUE , иначе √ FALSE.

4. % ROWCOUNT √ возвращает число строк, считанных курсором.

Циклы выборки.

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

Примеры:

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

Установка привилегий:

1. войти в ORACLE под именем SUSTEM пароль MANAGER

2. ввести следующую запись:

SQL grant all privileges to scott

3. зайти в SQL под именем scott

Пример:

Declare

V √ name cena_avto name % TYPE

V √ cena cena_avto cena % type

V √ probeg cena_avto probeg % type

V √ aod cena_avto god % type

/ *объявляем курсор*/

cursor curmy is

select name, probeg, cena, god from cena_avto

Where god between 1991 and 12000

Begin

Open curmy

Loop

/ *считываем информацию о машине* /

fetch aurmy into v_name v_cena v_probeg v_god;

(выйдем из цикла, когда строк для выбора больше нет)

exit when cuemy % NOFFOUND

(обработали считанные строки)

insert into table (name, probeg, cena, god)

values (v_name, v_probeg, v_ceno, v-god)

End loop;

(освободить ресурсы, используемые курсор)

close curmy

(завершим работу)

commit

End.

Пример больница:

Пациент, его атрибуты

Врачи, карточка

Create table Pazient

( FIO varchar 2 (30)

Vozrast char (20)

N polis char (20)

Address varchar 2 (30)

N kart char (20) not null

N uch char (20 not null)

Primary ney (N kart N uch))

Create table Vrach

( FIO vrach varchar 2 (30)

spezialnost char (30)

N vracha char (20) not null

Primary ney (N vrach))

Create table kartochka

( data char (20)

shialoba varchar 2 (2000)

diagnoz varchar 2 (2000)

lechenie varchar 2 (2000)

povt priem char (20)

N ZAP char (20) not null

N kart char (20)

N uch char (20)

Primary key (N ZAP)

Foreing key (N kart N uch)

Pacient (N kart N uch))

Create table uslugi

Name varchar 2 (500) not null

Cena char (10)

N vracha char (20)

N ZAP char (20)

Brimary rey (name)

Forein key (N ZAP)

Create table vizov vracha

N vrach char (20)

N ZAP char (20)

Foreing key (N vrach)

Расписание и начисление заработной платы.

Crate procedure

V_vrach (nvr in char npo in char) is begin

Declare

Cursor cur2 is select vrach. Kartochka n ZAP from vrach pacient kartochka where nach fio vrach = nvr and pacient n polis = npo and kartochka nuch = pacient nuch

(объявляем курсорную переменную)

cur2 VIZOV VRACH % type

begin

open cur2

fetch cur2 into

cur2

insert into VIZOV VRACH

values (cur2-r n vrach cur2_r nZAP )

close cur2

end

end

/

execute v_vrach (IVANOV)

selest * from VIZOV_ VRACHA

 


Тема 14. Ограничения целостности. Технология оперативной обработки транзакций (OLTP -технология). Информационные хранилища. OLAP - технология. Проблема создания и сжатия больших информационных массивов, информационных хранилищ и складов данных.

 

Лекции: 2 часа

 

В 60х гг. появились АИС предназначенные для хранения и обработки информации. По мере интеллектуализации АИС появилась возможность обработки текстовых документов на естественном языке (изображения и другие виды и формы представления данных).

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

- Документальные

- Фактографические

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

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

 







©2015 arhivinfo.ru Все права принадлежат авторам размещенных материалов.