Ответы к экзамену по БД. 1. Архитектура базы данных. Физическая и логическая независимость (трехуровневая модель ansi). 3
Скачать 2.24 Mb.
|
37. Поддерживаемый набор символов PL/SQL. Арифметические операторы и операторы отношения.Программа на PL/SQL состоит из последовательности операторов, каждый из которых образован одной или несколькими строками текста. Набор символов, из которых можно составлять эти строки текста, зависит от используемого в базе данных набора символов. Например, в таблице 1 приведен перечень символов, доступных в наборе US7ASCII. Любое ключевое слово, оператор и лексема PL/SQL состоит из различных комбинаций символов данного набора символов. Вам нужно лишь понять, как правильно собирать их вместе! Помните, что PL/SQL нечувствителен к регистру, то есть не имеет значения, как вы набираете ключевые слова и идентификаторы. Заглавные буквы воспринимаются так же, как строчные, если только они не выделены специальными разделителями, превращающими их в строковый литерал. Ряд символов (как по отдельности, так и в сочетаниях с другими символами) имеет специальное значение в PL/SQL (табл. 2). Группы символов образуют лексемы, которые также называют атомарными единицами языка, так как они являются его наименьшими неделимыми составляющими. Лексемами в PL/SQL являются идентификаторы, литералы, разделители и комментарии. Им посвящены последующие разделы. В следующей таблице показаны все арифметические операции, поддерживаемые PL / SQL. Предположим, переменная А имеет 10 и переменная B имеет 5, то: Операторы отношения. Реляционные операторы сравнения двух выражений или значений и возвращают логический результат. В следующей таблице приведены все операторы сравнения, поддерживаемые PL / SQL. Предположим, переменная А имеет 10 и переменная B имеет 20, а затем: знак равно <> = 38. Структура программы и переменные PL/SQL.PL/SQL – это процедурный блочно-структурированный язык. Он представляет собой расширение языка SQL и предназначен для работы с СУБД Oracle. PL/SQL предоставляет разработчику приложений и интерактивному пользователю следующие основные возможности: реализация подпрограмм как отдельных блоков, в том числе использование вложенных блоков; создание пакетов, процедур и функций, хранимых в базе данных; предоставление интерфейса для вызова внешних процедур; поддержка как типов данных SQL, так и типов, вводимых в PL/SQL ; применение явного и неявного курсора, а также оператора цикла FOR для курсора; введение у переменных PL/SQL и курсоров атрибутов, которые позволяют ссылаться на тип данных или структуру элемента; введение типов коллекций и объектных типов; поддержка набора операторов управления и операторов цикла; реализация механизма обработки исключений. Основной программной единицей PL/SQL является блок, который может содержать вложенные блоки, называемые иногда подблоками. Блок позволяет объединять объявления и операторы, связанные общей логикой; может быть анонимным и именованным. Блок состоит из трех основных частей: секция объявлений (необязательная часть); тело блока ; обработчики исключений (необязательная часть). Структура: DECLARE -- Описания блока, переменные, типы, курсоры и т. п. (опционально) BEGIN -- Непосредственно код программы EXCEPTION -- Обработка исключений (опционально) END; /* Многострочные комментарии… */ -- Однострочный комментарий PL/SQL не чувствителен к регистру, кроме строковых переменных и констант. Каждая конструкция PL/SQL должна заканчиваться символом ;. Одна конструкция может быть расположена на нескольких строках. Переменные — это именованные контейнеры. Они могут содержать информацию (данные) различных видов. В зависимости от того, какую информацию в них можно помещать, они имеют различные типы данных, а чтобы отличать их друг от друга, им присваиваются имена. PL/SQL хранит числа в переменных типа NUMBER, а текст — в переменных типа CHAR или VARCHAR2. Синтаксис объявления переменной в PL/SQL может иметь любую из следующих форм: Имя_переменной — это любой правильный идентификатор PL/SQL. Правильный идентификатор PL/SQL должен: Иметь не более 30 символов в длину и не содержать пробельных символов (собственно пробелов и знаков табуляции). Состоять только из букв, цифр от 0 до 9, символа подчеркивания (_), знака доллара ($) и знака фунта (#). Начинаться с буквы. Не совпадать с зарезервированными словами PL/SQL или SQL, которые имеют специальное значение. Например, именем переменной не может быть слово BEGIN, которое обозначает начало выполняемой секции базового блока PL/SQL. Переменные PL/SQL: скалярные (char, number, date и т.д.); составные (PL/SQL Table, PL/SQL Record, Nested Table и …); ссылочные; LOB (Large OBject) – большие объекты. Тип_данных — это любой допустимый тип данных SQL или PL/SQL. Модификатор NOT NULL требует, чтобы переменная имелазначение. Если он указан, переменной должно быть присвоено значение по умолчанию. 39. PL/SQL. Условные операторы IF.В Oracle, оператор IF-THEN-ELSE используется для выполнения кода при условии TRUE (истинно), или выполнения другого кода, если условие принимает значение FALSE (ложь). Существует три различных синтаксиса условных операторов этого типа. Синтаксис #1: IF-THEN. Используете синтаксис IF-THEN, если хотите выполнять операторы, только когда условие истинно. IF УСЛОВИЕ THEN {…выполняется, когда УСЛОВИЕ истинно (TRUE)…} END IF; Синтаксис #2: IF-THEN-ELSE. Если вы хотите выполнить один набор предложений, когда условие истинно, используете синтаксис IF-THEN-ELSE, или другой набор предложений, если условие ложно. IF УСЛОВИЕ THEN {… выполняется, когда УСЛОВИЕ истинно (TRUE)…} ELSE {… выполняется когда УСЛОВИЕ ложно (FALSE)…} END IF; Синтаксис #3: IF-THEN-ELSIF. Используете синтаксис IF-THEN-ELSIF-ELSE, если хотите выполнить один набор предложений, когда УСЛОВИЕ1 принимает значение истина (TRUE); другой набор предложений, когда УСЛОВИЕ2 истинно (TRUE); или третий набор предложений, когда все предыдущие условия (то есть: УСЛОВИЕ1 и УСЛОВИЕ2) являются ложными (FALSE). IF УСЛОВИЕ1 THEN {… выполняется, когда УСЛОВИЕ1 истинно (TRUE)…} ELSIF УСЛОВИЕ2 THEN {… выполняется, когда УСЛОВИЕ2 истинно (TRUE)…} ELSE {… выполняется, когда оба: УСЛОВИЕ1 и УСЛОВИЕ2 ложно (FALSE)…} END IF; После того, как условие истинно (TRUE), оператор IF-Then-Else будет выполнять заявленный код и не оценит условие дальше. Если условие ложно (FALSE), то выполняется часть ELSE оператора IF-Then-Else. Важно отметить, что участки ELSIF и ELSE являются дополнительными. Неявно объявляет переменную цикла как запись %ROWTYPE. Открывает курсор. При каждой итерации извлекает следующую строку из результирующего набора в поля неявно объявленной записи. По достижении конца результирующего набора закрывает курсор.
Стандартные встроенные функции:
44. PL/SQL. Триггеры.Triggers Триггеры – специальные хранимые процедуры, вызываемые автоматически при изменении данных в таблице (при добавлении, изменении или удалении данных из таблицы). Например, можно писать триггеры, срабатывающие при выполнении над таблицей операций INSERT, UPDATE или DELETE; при выдаче команд DDL; при входе пользователя в систему или его выходе из системы; при запуске или останове базы данных; при возникновении ошибок. Между триггерами и процедурами PL/SQL есть три различия: • Триггеры нельзя вызывать из кода программы. Oracle вызывает их автоматически в ответ на определенное событие. • Триггеры не имеют списка параметров. • Спецификация триггера немного отличается от спецификации процедуры. Синтаксис команды для создания триггера, следующий: --- CREATE [OR REPLACE] TRIGGER имя_триггера --------------------- --- BEFORE | AFTER активизирующее_событие ON ссылка_на_таблицу --- --- FOR EACH ROW [WHEN условие_срабатывания] --------------------- --- тело_триггера ------------------------------------------------ Где: имя_триггера – собственно имя вашего триггера. активизирующее_событие – указывает момент активации триггера BEFORE до срабатывания оператора DML, AFTER после срабатывания оператора DML. ссылка_на_таблицу – собственно таблица, для которой создан триггер. FOR EACH ROW - если указано активируется от воздействия на строку если нет, то после любого оператора DML. условие_срабатывания – если TRUE триггер срабатывает, если FALSE нет. тело_триггера – собственно тело триггера. |