Рассмотрим операторы для программирования хранимых процедур. 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Рассмотрим операторы для программирования хранимых процедур.



· Create имя_процедуры (параметры)

[return список выходных данных]

тело

End procedure - создание процедуры;

· Execute procedure имя (аргументы)[into список переменых] -– выполнение процедуры, созданной заранее;

· drop procedure имя – удаление хранимой процедуры;

· define список переменных – позволяет объявить переменные, которые являются локальными в хранимой процедуре;

· call имя (аргументы) into список переменных – позволяет вызвать другую процедуру;

· переменная:=выражение – присвоение;

· if условие then оператор [else оператор] end if – условный оператор;

· операторы цикла

for переменная:=целое1

to целое2 step целое

end for

 

while условие

тело

end while

 

for each имя_курсора

операторы

end for each

Среди операторов ТЕЛА используются следующие:

Exit - позволяет выйти из цикла до его завершения;

Continue – позволяет начать выполнение цикла, не заканчивая предыдущий шаг;

System – позволяет выполнить команды ОС;

Return – позволяет сформировать результаты и вернуть их из процедуры;

Begin

. – блок, часть пограммы, в которой могут быть объявлены

. локальные переменные.

end

4 вариант – сервер приложений.

 
 


С помощью протокола API передается информация о том какие программы и в какой последовательности нужно выполнять.

В технологии клиент-сервер есть специальные активные программы, которые называют триггерами.

Триггер – это активная программа, которая не вызывается программистом, а активизирует сама себя в зависимости от условий, возникающих при обработке данных.

· Create trigger имя событие_действие - создание триггера;

· Drop trigger - удаление.

Запись события:

· Insеrt on имя_таблицы – наступает тогда, когда в таблицу заносится информация;

· Delete on таблица – наступает при удалении из таблицы;

· Update of список_полей on имя_таблицы - возникает при изменении заданных полей в указанной таблице.

Действия бывают трех видов:

· Before (оператор) – перед добавлением, удалением, изменением;

· Foreach row (оператор) – для каждой строки таблицы;

· After (оператор) после добавления, удаления, изменения.

В триггерах есть возможность сослаться на одно и тоже поле до изменения и после:

· Referencing old as имя – запомнить до изменения;

· Referencing new as имя – запомнить после изменения;

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

Пример.

Изменить статус поставщиков только в том случае, если новый статус не меньше старого и не больше 100%.

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

Create trigger Sstat

Update of статус on Поставщики

Referencing old as c1

Referencing new as c2

Foreach row

When (с1.статус >=с2.статус)

Execute procedure error (с1.статус,с2.статус)

When (с2.статус>100%)

Execute procedure error1 (с1.статус,с2.статус)

Внутренняя модель данных.

Индекс – это таблица, состоящая из двух полей, первое поле – это ключ, второе поле – это ссылка на запись в БД с этим ключом индексации.

Индекс позволяет выполнить две работы:

· Выполнить сортировку файла не перемещая физически его записи;

· Ускорить поиск информации.

Пример.

Файл а1:

адреса А1 А2 А3
A0 d   F
A1 a   M
A2 C   F
A3 B   M
A4 Z   M
A5 I   F
A6 J   M
A7 k   M

Организуем индексацию по полю А1, индекс будет плотный, т.е. индексируются все значения ключа.

Запишем файл упорядоченный по полю А1:

B A1 адрес
B1 A A1
B2 B A3
B3 C A2
B4 D A0
B5 I A5
B6 J A6
B7 K A7
B8 Z A4

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

A1 адрес
C B1
J B4
z B7

В первом столбце записан старший ключ, во втором столбце младший ключ.

Рассмотрим, например поиск записи с ключом I.

Смотрим в последнюю таблицу и ищем где ключ больший I, это J, его адрес B4, теперь обращаемся ко второй таблице, находим тройку записей, у которой младший индекс B4, это тройка D,I,J, находим в ней I, смотрим какой она имеет адрес – A5, обращаемся в первую таблицу и находим запись с адресом А5.

Индекс с инвертированными списками.

Инвертированный список хранит список ключей для каждого значения где это значение встречается.

А3 Список адресов
F A0, A2,A5
M A1,A3,A4,A6,A7

B-дерево.

В-дерево – это сбалансированное дерево.

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

В основе В-дерева лежат следующие аксиомы:

· В-дерево порядка n содержит 2n ключей 2n+1 ссылку;

· В –дерево растет от листьев к корню;

· Путь от корня к листу содержит одно и тоже количество шагов;

· Каждый узел заполняется не менее чем на половину, кроме корня.

Пример.

Пусть у нас есть дерево третьего порядка, с ключами 12, 8, 4, 9, 6, 13, 14, 16,100, 10.

Приходит ключ 12, его заносим в корень

 
 
 


8 12
Приходит 8, 8 меньше 12

 

 

Приходит 4, места в корне нет, разбиваем на 2

 
 

 


Приходит 9, она больше 8, но меньше 12, 12 сдвигаем, перед ней записываем 9, приходит 6 она меньше 8, но больше 4, записываем ее после 4:

 

 

После того как придет 13, 14, 16, 100, 10 вид дерева будет следующим:

 
 

 

 


ЯЗЫК QUERY BY EXAMPLE (QBE)

Введение

Реляционный язык QBE разработан М. М. Цлуфом в научно-исследовательской лаборато­рии фирмы IBM. QBE похож на SQL тем, что в своем первоначальном ва­рианте обеспечивал только средства для запроса, тогда как в последующие версии были включены операции запоминания и многие другие возможности. Общий уровень языка сходен с уровнем языка SQL, хотя существуют некоторые операции запроса, возможные в QBE и не имеющие аналога в SQL или в каком-либо другом языке. Более очевидное различие между языками SQL и QBE в том, что последний разработан главным образом для работы с терминала (дисплея). Всякая операция в QBE специфицируется с помощью одной или нескольких таблиц; каждая такая таблица строится на экране дисплея ча­стично системой, частично пользователем. Поскольку операции задаются в табличной форме, то QBE имеет двумерный синтаксис. Большинство традицион­ных языков, наоборот, имеют линейный синтаксис.

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

Операции выборки

Действительно значительной особенностью QBE является использование примеров для спецификации запросов (а также всех других операций, хотя все время мы рассматриваем только выборку). Основная идея состоит в том, что пользователь формирует запрос, занося пример возможного ответа в со­ответствующее место пустой таблицы. Например, рассмотрим запрос: «Полу­чить номера поставщиков, находящихся в Париже». Первоначально система выдает на экран пользователю полностью пустую таблицу. Пользователь, знающий, что ответ на запрос находится в таблице Поставщики, запишет Поставщики в качестве имени таблицы; тогда система ответит заполнением соответствующих имен столбцов. Теперь пользователь может сформировать запрос, заполняя две позиции в таблице, как показано ниже.

Поставщики №поставщика Фамилия статус город
Поставщики №поставщика фамилия статус город
    P. 7         Париж

«P» означает «печать» (print); эта литера указывает цель запроса, т. е. значе­ния результата, которые должны быть выданы. 7 являются «элементом-примером», т. е. примером возможного ответа на запрос; элемент-пример выделяет­ся подчеркиванием. Париж (не подчеркнуто) есть константа. Этот запрос мо­жет быть интерпретирован следующим образом: «Напечатать все №поставщиков, такие, как, скажем, 7, для которых соответствующий город — Париж». Отметим, что в результирующем множестве или даже в исходном множестве не обязательно должно находиться именно 7 — элемент-пример является полностью произвольным, и мы могли бы с равным успехом ис­пользовать PIG или X, не изменяя смысла запроса.

Элементы-примеры используются для установления связей между строками в более сложных запросах. Если же связи не нужны, как в простом запросе, приведенном выше, то можно полностью опустить эле­менты-примеры (так, что Р. 7 сократилось бы до «Р»), однако в общем слу­чае для ясности мы будем их включать.

Простая выборка. Получить номера всех поставляемых деталей.

Поставки №поставщика №детали количество
  Р. 2    

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

Простая выборка. Получить полные данные о всех поставщиках.

Поставщики №поставщика Фамилия статус Город
  Р. х Р. фамилия Р. статус Р. город

Сокращенное представление того же запроса

Поставщики №поставщика Фамилия статус Город
Р.                

Здесь оператор печати относится ко всей строке.

Выборка по условию. Получить номера поставщиков, находящихся в Париже и имеющих статус >20.

Поставщики №поставщика Фамилия статус Город
    P. х     >20 Париж

Обратите внимание, как задается условие «>20». Вообще, таким же об­разом может быть использован любой из операторов сравнения =, <>, <, <=, =>, > (исключение; = обычно опускается, как в столбце город приведенной выше таблицы)

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

Поставщики №поставщика фамилия статус город
    P. X         Париж
    P. Y     >20    

Условия, заданные в одной строке, рассматриваются как операнды операции «И». Для «ИЛИ», следовательно, оба условия необходимо задавать в разных строках.

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

Выборка по условию. Получить номера тех поставщиков, которые поставляют деталь 1 и деталь 2.

Поставки №поставщиков №деталей количество
    P. х      
    х      

Здесь один и тот же элемент пример должен использоваться дважды; чтобы сформулировать запрос, нам необходимо две строки, так как нужно соединить операцией «И» два условия в одном и том же столбце.

8.2.6. Выборка с использованием связи. Получить имена поставщиков, по­ставляющих деталь 2.

Поставщики №поставщика Фамилия статус город
    х P. фамилия        

 

Поставки №поставщика №детали Количество
  х    

Элемент-пример №X используется как связь между таблицами Поставщики и Поставки. Вообще говоря, такие связи используются в языке QBE там, где в языке SQL тре­буется вложенное отображение, а в реляционной алгебре—операция JOIN. (На самом деле №х в предыдущем примере также выполняло роль связи, но только связываемые строки находились в одной и той же таблице.)

8.2.7. Выборка с использованием связей. Получить имена поставщиков,

Поставщики №поставщика Фамилия статус город
    Х P. фамилия        
 

Поставки №поставщика №детали количество
    Х X    
 

по­ставляющих по крайней мере одну деталь красного цвета.

Детали №детали название цвет вес количество
    X     красный        

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

Поставщики №поставщика фамилия статус город
  Х Р.фамилия    

 

Поставки №поставщика №детали количество
Х    

Обратите внимание на оператор NOT () в строке таблицы Поставки. Запрос может быть интерпретирован следующим образом: «Напечатать имена таких поставщиков с номерами X, чтобы ни один поставщик X не поставлял деталь 2».

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

Поставки №поставщика №детали количество
Р. Х Х Х    

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

Поставки №поставщиков №деталей количество
  Х Х Р. Х Х  

Этот запрос может быть интерпретирован как «Напечатать номера Х таких деталей, что деталь Х поставляется некоторым поставщиком X, а также некоторым поставщиком, отличным от X». Символ может быть еще за­писан как .

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

Результат этого запроса не является проекцией существующей таблицы, скорее, это есть проекция соединения двух существующих таблиц. Для того чтобы сформулировать такой запрос на языке QBE, пользователь должен сна­чала построить остов таблицы ожидаемого результата (т. е. таблицу с соот­ветствующим количеством столбцов). Этой таблице и ее столбцам могут быть даны любые имена, какие только желает пользователь — они могут быть даже оставлены пустыми. Пользователь затем может сформулировать запрос, ис­пользуя таблицу «результат» и две существующие таблицы так, как показано ниже.


Поставщики №поставщика фамилия статус город
  Х     Г
 

  Поставки №поставщика №детали количество
    Х Х  
Результат №детали город
  Р. Х Р. Г
             

Выборка, включающая ALL. Получить номера поставщиков, постав­ляющих все детали.

Поставки №поставщика №детали количество
  Р. Х ALL.Х  

 

Детали №детали название цвет вес город
  ALL.Х        

Выражение ALL. Х в таблице Детали относится ко всем номерам деталей, содер­жащимся в этой таблице. Выражение ALL.X в таблице Поставки относится ко всем номерам деталей, поставляемых поставщиком X. Так как эти выраже­ния идентичны, то X должен быть поставщиком, который поставляет все детали. Между прочим, если столбец слишком узок для выражения, скажем, ALL.X, которое пользователь хочет в него записать, то система позволяет пользователю предварительно увеличить ширину столбца. Таким образом, каждая строка запроса может содержаться в одной строке экрана.

Выборка, включающая ALL. Получить номера поставщиков, постав­ляющих по крайней мере все те детали, которые поставляет поставщик 2.

Поставки №поставщика №детали количество
  Р. Х [ ALL. X ] ALL. X  

Выражение ALL<PX во второй строке этого запроса представляет множество всех номеров деталей, поставляемых поставщиком S2. Первая строка озна­чает, что мы отыскиваем поставщиков, таких, как SX которые поставляют ALL.X и, возможно, еще и другие детали. (Точка означает, что X может вдобавок поставлять некоторую деталь, не принадлежащую множеству ALL.X) Квадратные скобки служат просто для того, чтобы отнести. и ALL.Х к первой строке.

Выборка с использованием блока условия. Рассмотрим пример за­проса из предыдущего пункта, но из результата исключим номер поставщика 2.

Поставки №поставщика №детали количество
  Р. Х [ALL. X ] ALL. X  

 

Блок условия  
Х 2

Иногда бывает трудно выразить желаемое условие в рамках таблиц запроса. В подобном случае QBE позволяет пользователю записывать условие в от­дельный «блок условия», как это показано в приведенном примере. В данном конкретном случае, однако, требуемый результат можно было бы получить без использования блока условия путем простой замены P.X в исходном за­просе на Р. 2 (2 не подчеркнуто).

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

Поставщики №поставщиков фамилия статус город
  Р. Х     Т > T  

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

«В таблице Поставки нет строки со статусом > T».



Поделиться:


Последнее изменение этой страницы: 2016-09-20; просмотров: 232; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.139.238.76 (0.053 с.)