ВУЗ: Не указан

Категория: Не указан

Дисциплина: Не указана

Добавлен: 28.07.2021

Просмотров: 485

Скачиваний: 3

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.

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

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

IF (COLUMNS_UDATED()) — выше было показано, как можно с помощью конструкции If update (столбец) определять, какие столбцы затрагиваются изменениями. 


Для отслеживания вносимых изменений в MS SQL Server используются специальные системные таблицы inserted и deleted. Таблица inserted содержит добавленные строки, а таблица deleted — удаленные. Нетрудно догадаться, что при выполнении операции изменения, будет использована и таблица inserted, и таблица deleted. 


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

SELECT *

FROM deleted

Нельзя создавать INSTEAD OF UPDATE и DELETE триггеры на таблицы, имеющие внешние ключи с установленными опциями каскадного изменения или удаления соответственно.

В общем случае не существует ограничения на количество триггеров. Стандартных триггеров типа AFTER для каждой операции модификации может быть разработано несколько. Все триггеры анализируются последовательно в порядке их создания. В отличие от After-триггеров существует ограничение на триггеры Instead Of. На каждую операцию модификации может быть создан только один триггер

Триггеры можно встраивать друг в друга, допускается 32 уровней вложенности. Если операции вложенного триггера нежелательны, SQL Server можно сконфигурировать так, чтобы отключить их.

Вложенные триггеры могут привести к рекурсии. Рекурсия бывает двух видов: прямая и косвенная. Прямая рекурсия получается в случае, если срабатывание триггера приводит к изменениям, которые вновь вызывают его же. Косвенная рекурсия получается, когда срабатывание триггера приводит к изменениям, которые приводят к срабатыванию другого триггера, что в свою очередь приводит к изменениям, вызывающим срабатывание первого триггера. Конечно же, цепочка может состоять не только из двух, но и из большего числа триггеров. Прямую рекурсию можно отключить (и включить) с помощью опции БД recursive triggers. Отключить (и включить) косвенную рекурсию, равно как и вложенность триггеров вообще, можно с помощью серверной опции nested_triggers. Эта опция определяет возможность вложенности триггеров не для одной конкретной БД, а для всего сервера.


Хранимые процедцры



С точки зрения приложений, работающих с БД, хранимые процедуры (Stored Procedure) — это подпрограммы, которые выполняются на сервере. По отношению к БД это объекты, которые создаются и хранятся в БД. Они могут быть вызваны из клиентских приложений. При этом одна процедура может быть использована в любом количестве клиентских приложений, что позволяет существенно сэкономить трудозатраты на создание прикладного программного обеспечения и эффективно применять стратегию повторного использования кода. Так же, как и любые процедуры в стандартных языках программирования, хранимые процедуры могут иметь входные и выходные параметры или не иметь их вовсе.


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

Хранимые процедуры пишутся на специальном встроенном языке программирования, они могут включать любые операторы SQL, а также включают некоторый набор операторов, управляющих ходом выполнения программ, которые во многом схожи с подобными операторами процедурно ориентированных языков программирования. В коммерческих СУБД для написания текстов хранимых процедур используются собственные языки программирования. Так, в СУБД Oracle для этого используется язык PL /SQL, а в MS SQL Server и System11 фирмы Sybase используется язык Transact SQL. В последних версиях Oracle объявлено использование языка Java для написания хранимых процедур.

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

Хранимая процедура — это набор команд, хранимый на сервере и выполняемый как единое целое.

Для создания хранимой процедуры применяется оператор SQL CREATE PROCEDURE.

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

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

В MS SQL Server хранимая процедура создается оператором:

CREATE PROC[EDURE] <имя_процедуры> [;<версия>]

[{@параметртип_данных}

[VARYING] [= <значение_по_умолчанию>] [ OUTPUT ]]

[,.параметр N ...]

[ WITH

{ RECOMPILE

| ENCRYPTION

| RECOMPILE, ENCRYPTION }]

[ FOR REPLICATION ]

AS

Тело процедуры

Здесь необязательное ключевое слово VARYING определяет, что в качестве выходного параметра используется результирующий набор — только для типа cursor

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

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

Ключевое слово ENCRYPTION определяет режим, при котором исходный текст хранимой процедуры не сохраняется в БД. Такой режим применяется для того, чтобы сохранить авторское право на интеллектуальную продукцию, которой и являются хранимые процедуры. Часто такой режим применяется, когда вы ставите готовую базу заказчику и не хотите, чтобы исходные тексты разработанных вами хранимых процедур были бы доступны администратору БД, работающему у заказчика. Однако надо помнить, что если вы захотите отредактировать текст хранимой процедуры сами, то вы его тоже не сможете извлечь из БД, его надо будет хранить отдельно, в некотором текстовом файле — и это не самое плохое. Но вот в случае восстановления БД после серьезной аварии для перекомпиляции потребуются первоначальные исходные тексты всех хранимых процедур. Поэтому защита вещь хорошая, но она усложняет сопровождение и модификацию хранимых процедур.


FOR REPLICATION — ключевые слова, показывающие, что эта процедура создается только для репликации.

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


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

Хранимая процедура может быть вызвана несколькими способами. Простейший способ — это использование оператора:

EXEC <имя процедуры> <значение_входного_параметра1>...

<имя_переменной_для_выходного параметра1>...

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

Однако если нам необходимо получить например, число экземпляров книги «Oracle8. Энциклопедия пользователя», которая имеет ISBN 966-7393-08-09, то текст вызова ранее созданной хранимой процедуры может быть следующим:

/*определили две переменные

@Ntek — количество экземпляров данной книги в наличие в библиотеке

@ISBN — международный шифр книги */

declare @ Ntek int

DECLARE @ ISBN VARCHAR (14) 

/* Присвоим значение переменной @ISBN */

Select @ ISBN = ’966-7393-08-09’

/* Присвоим переменной @Ntek результаты выполнения хранимой процедуры

COUNT_EX */

EXEC @Ntek = COUNT_EX @IS



  1. Язык php. Особенности синтаксиса, основные операторы. Ассоциативные массивы [4 часть 1, с.10-21, 30-34].


Php – язык вебпрограммирования

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


Основные операторы


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




ИНФЫ ПО ОПЕРАТОРАМ ОЧЕНЬ МНОГО, НО ОНА НЕ СЛОЖНАЯ, ПРОСТО СТРАНИЦ 10, ЛУЧШЕ ВЫКАЧАТЬ В ОТДЕЛЬНЫЙ ФАЙЛ НА ТЕЛЕФОН ИЗ КУРСА (ЛЕЦИИ ПО ТЕМЕ 2)


Ассоциативные массивы


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

Элементы массива нумеруются начиная с 0, а не с 1.

$names[] = "Jill"; //

или $names[0] = "Jill"

$names[] = "Jack";

или $names[1] = "Jack"

Массив можно инициировать специальной функцией инициализации массива array()

$names = array(“Jill”,”Jack”)

$names1 = array(“первый”,”второй”,”третий”,”четвертый”, 5, 6)

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

$arr1 = array(“первый”=> 1, “второй”=> 2 )

тогда обратиться к элементу массива можно по ключу

$arr1[“второй”] будет равно 2




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

$mim = array(“a”=>100,”b”=>200,”c”=>500); // линейный одномерный ассоциативный массив, a b c – это значения ассоциатора (символьного индекса массива)

$mim[“a”] будет равно 100

Но к ассоциативному массиву можно обращаться и по индексам

$mim[0] тоже равно 100

Можно присваивать значения ассоциативным массивам

$mim[“a”]= 700 теперь элемент с индексом “a “ - имеет значение 700.

Массивы можно строить любой глубины вложенности и любой сложности:

$fruits = array(

"fruits" => array("a"=>"orange","b"=>"banana","c"=>"apple"),

"numbers" => array(1, 2, 3, 4, 5, 6),

"holes" => array("first", 5 => "second", "third") );

Можно создавать «неравномерные» массивы.

$mm = array(“aa”=>1200,300,”bb”=>400, array(1,2,3,4,5));

$mm – массив, состоящий на верхнем уровне из 4-х элементов, при этом последний четвертый элемент этого массива сам является массивом.


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

  • reset($arr) сброс курсора или установка в исходное состояние;

  • Next ($arr) – переход к следующему элементу;

  • Prev ($arr) – возврат к предыдущему элементу;

  • Current ($arr) – установка на текущий элемент массива;

  • Key($arr) получение значение ключа текущего элемента массива;

В PHP существуют специальные функции сортировки массивов.

Sort(arr) - сортирует элементы в соответствие с числовым и алфавитным порядком (числа знаки пунктуации буквы).Функция заменяет индексы на числовые.


asort(array) - сортирует без изменения символьных индексов.

rsort() - сортируют в обратном порядке.

rasort() - сортируют в обратном порядке по символьным индексам.

ksort() - сортирует массив по ключу.

krsort() - сортирует массив по ключу в обратном порядке

Natsort() использует натуральный порядок чисел для сортировки: 1,3,5,10 а не 1,10,3,5

Natcasesort() 0 Естественная сортировка нечувствительная к регистру

Shuffle() - переставляет элементы массива случайным образом


  1. Методы взаимодействия клиентов и сервера баз данных при использовании Интернет-технологий. Реализация диалога для ввода и публикации данных, хранимых на сервере баз данных с использованием языка php. [4 часть 2 с.14-25].





Вся сеть Интернет построена по принципу «клиент-серверной» архитектуры. Эта архитектура, прежде всего, относится к разделению некоторой конкретной задачи в ходе ее решения на два взаимодействующих процесса. При этом один из процессов инициирует диалог с другим процессом в ходе решения данной задачи. Это весьма близко к обслуживанию в магазинах: множество клиентов обслуживает один продавец, который в ответ на запросы покупателей выдает им конкретные товары и получает за них деньги. Первый процесс принято называть «клиентом», в данной архитектуре, а второй – «сервером». Серверный процесс может обслуживать множество клиентов.


Каждый раз, щелкая по очередной ссылке, вы запрашиваете новый WEB-документ, посылая запрос на сервер, содержащий требуемый документ. Сервер, которому Вы отослали запрос – это Web-сервер. Сервер получает запрос, берет нужный документ и посылает его назад браузеру. Эту схему графически можно представить следующим образом.

Shape5

Взаимодействие «клиента» и «сервера» в сети Интернет осуществляется по протоколу HTTP (HyperText Transfer Protocol, протокол передачи гипертекста). Этот протокол является базовой основой технологий WWW.

HTTP используется для коммуникаций между различными пользовательскими программами и программами-шлюзами, предоставляющими доступ к существующим Internet-протоколам, таким как SMTP (протокол электронной почты), NNTP (протокол передачи новостей), FTP (протокол передачи файлов), Gopher и WAIS. HTTP разработан для того, чтобы позволять таким шлюзам через промежуточные программы-серверы (proxy) передавать данные без потерь.

Протокол реализует принцип запрос/ответ. Запрашивающая программа – клиент инициирует взаимодействие с отвечающей программой – сервером и посылает запрос, содержащий:

  • метод доступа;

  • адрес URI;

  • версию протокола;

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

Ответ сервера содержит:

  • строку состояния, в которую входит версия протокола и код возврата (успех или ошибка);

  • сообщение (в форме, похожей на MIME), в которое входит информация сервера, метаинформация (т.е. информация о содержании сообщения) и тело сообщения.


Смотрите также файлы