Читайте также:
|
|
Привилегии выдается при помощи Grant и забираются при помощи Revoke.
Различают три вида привилегий:
-Объектные (Object privileges) – это разрешения на объекты схемы, такие как таблицы, представления, последовательности, пакеты. Для использования объектов схемы принадлежащих другому пользователю, необходимы привилегии на этот объект.
-Системные (System privileges) – это разрешения на операции уровня базы данных, например подключение к базе данных, создание пользователей, внесение изменений в конфигурацию базы данных.
-Ролевые (Role privileges) – это объектные и системные привилегии, которые пользователь получает как роль. Роли – это возможность для администрирования групп или привилегий.
Объектные привилегии позволяют выдать разрешения на объекты принадлежащие другому пользователю. В общем, системные привилегии позволяют выполнять DDL предложения, например CREATE, ALTER и DROP. Кроме того, создание пользователей, управление табличными пространствами, установка соединений с базой данных. Различие заключается в том, что системные привилегии позволяют манипулировать базой данных в целом, а объектные только конкретными объектами БД.
Системные привилегии выдает администратор, объектные – владелец объекта.
Примеры системных привилегий:
CREATE TABLE
CREATE ANY TABLE
CREATE VIEW
CREATE SYNONYM
CREATE CLUSTER
CREATE SEQUENCE
CREATE ANY INDEX
SELECT ANY DICTINARY
EXECUTE PROCEDURE
Объектные привилегии:
Привилегия | Выдается на |
SELECT | Таблицы, представления, последовательности, синонимы |
INSERT | Таблицы, представления, синонимы |
UPDATE | Таблицы, представления, синонимы |
DELETE | Таблицы, представления, синонимы |
ALTER | Таблицы, последовательности |
EXECUTE | Процедуры, функции, пакеты, синонимы |
REFERENCE | Таблицы |
22. Аудит в СУБД Oracle: типы аудита, принцип применения.
23. Язык PL/SQL: основные характеристики. Структура программы. Анонимные блоки. Применение переменных связи. Локальные процедуры и функции.
PL/SQL (Procedural Language / Structured Query Language) — язык программирования, процедурное расширение языка SQL, разработанное корпорацией Oracle. Базируется на языке Ада.
Не чувствителен к регистру.
PL/SQL даёт возможность использовать переменные, операторы, массивы, курсоры и исключения. Начиная с версии 8 доступна и объектно-ориентированная модель.
Стандартный SQL является специализированным декларативным языком программирования. На язык наложены определённые ограничения, такие как, например, отсутствие прямой поддержки циклов. PL/SQL же, как полный по Тьюрингу язык, позволяет разработчикам обрабатывать данные в реляционной базе, используя императивный стиль программирования. Операторы SQL могут быть легко вызваны непосредственно из PL/SQL-процедуры, функции или из триггера (иногда с некоторыми ограничениями).
Характеристика языка PL/SQL:
- процедурное расширение языка SQL;
- содержит элементы объектно-ориентированного программирования;
- блоки, процедуры, функции, пакеты, объектные типы;
- интегрирован с базой данных Oracle;
- интерпретация (режим по умолчанию):
- компиляция (промежуточный код на C и конечный объектный код процессора) дает выигрыш в скорости выполнения до 30%;
- среда выполнения: SQL*Plus, другие пакеты, сервер.
Программа на PL/SQL состоит из блоков (анонимных или поименованных). Блок может содержать вложенные блоки, называемые иногда подблоками. Общая форма PL/SQL-блока:
DECLARE
-- Описания блока, переменные, типы, курсоры и т. п. (опционально)
BEGIN
-- Непосредственно код программы
EXCEPTION
-- Обработка исключений (опционально)
END;
/* Многострочные
комментарии… */
-- Однострочный комментарий
АБ (Анонимный блок) - совокупность операторов plsql, выполняемых единовременно. Простейший АБ:
BEGIN
NULL;
END;
Наименование «анонимный» получил из-за того, что в отличие от процедур и функций не имеет имени, не предназначен для длительного хранения в БД и повторного вызова.
Использование связанных переменных
Как при использовании курсоров, так и при использовании указателей на курсоры рекомендуется при формировании запросов не включать туда конкретные константы (кроме тех случаев, когда эти константы действительно будут сохраняться во всех подобных запросах). Связано это с тем, что при последовательном выполнении двух запросов, отличающихся только константой (например, SELECT ename FROM employees WHERE id = 20 и SELECT ename FROM employees WHERE id = 21), СУБД производит разбор каждого запроса отдельно, хотя на самом деле план выполнения у таких запросов общий. Такие повторные разборы могут существенно снизить производительность приложения.
Для предотвращения лишних разборов следует использовать связанные переменные (англ. bind variables), то есть переменные непосредственно в теле запроса, значения которых будут подставляться только при открытии курсора для запроса. Связанные переменные обозначаются именем, предварённым символом двоеточия. При открытии курсора значения переменных указываются с помощью предложения USING.
При первом выполнении функции, приведённой ниже, запрос будет разобран в СУБД, для него будет создан план выполнения (это будет происходить сравнительно долго). При последующих выполнениях функции будет использоваться уже созданный план выполнения, и запрос будет быстро возвращать значения.
FUNCTION get_employee_name (empid INTEGER, empcity VARCHAR2) RETURN VARCHAR2 IS TYPE GenericCursor IS REF CURSOR; c1 GenericCursor; empname VARCHAR2(200);BEGIN OPEN c1 FOR 'SELECT ename FROM employees WHERE id =:id AND city =:city' USING empid, empcity; -- цикл не используется, так как запрос вернёт не более одной строки FETCH c1 INTO empname; CLOSE c1; RETURN empname;END get_employee_name;
Локальные процедуры и функции PL/SQL
Это процедуры и функции создаваемые и используемые внутри других plsql-блоков, например в секции declare анонимного блока (или после is/as в случае фн. и процедур) они объявляются, а в теле используются. Эти фн. процедуры не доступны извне и поэтому и называются локальными. Условно говоря они не создаются (create), а объявляются и имеют область в рамках данного блока PL/SQL.
DECLARE
X NUMBER(3):=4;
Y NUMBER(3):=5;
Z NUMBER(3);
PROCEDURE SUMMOD5 (X1 NUMBER, X2 NUMBER, X3 OUT NUMBER)
IS
Z NUMBER(3):=5;
BEGIN
X3:=MOD(X1+X2,Z);
END SUMMOD5;
BEGIN
SUMMOD5(X, Y, Z);
DBMS_OUTPUT.PUT_LINE('Z = '||Z);
EXCEPTION
WHEN OTHERS THEN DBMS_OUTPUT.PUT_LINE(SQLERRM);
END;
24. Язык PL/SQL: типы данных, основные операции, константы, инструкция %TYPE.
Типы данных PL/SQL (не путать с типами данных базы данных):
a. скалярные (Scalar);
b. ссылочные (Reference);
c. составные (Composite);
d. большие объекты (LOB).
Скалярные типы данных можно разбить на семейства:
- символ/строка;
- число;
- булев;
- дата/время.
Числовые типы данных:
Булев тип
Дата и время
Типы данных для хранения символьной информации в базе данных Oracle и программе на PL/SQL.
Char, varchar2, nchar, nvarchar.
Типы данных для хранения числовых данных в базе данных Oracle и программе на PL/SQL.
Number, integer | binary_float, binary_double, binary_integer, pls_integer, natural, positive, signtype.
Конста́нта — способ адресования данных, изменение которых рассматриваемой программой не предполагается или запрещается.
Константы целесообразно использовать в тех случаях, когда после инициализации значение некой переменной гарантированно не должно изменяться.
DECLARE
N1 CONSTANT NUMBER(5):=5;
C1 CONSTANT VARCHAR2(5):='ABC';
C2 CONSTANT CHAR(5):='ABC';
BEGIN
DBMS_OUTPUT.PUT_LINE('N1 = '||N1);
DBMS_OUTPUT.PUT_LINE('C1 = '||C1);
DBMS_OUTPUT.PUT_LINE('C2 = '||C2);
--N1:=10;
EXCEPTION
WHEN OTHERS
THEN DBMS_OUTPUT.PUT_LINE('ERROR = '||SQLERRM);
END;
Опция %TYPE при объявлении переменной в PLSQL позволяет явно не указывать тип переменной, а сослаться на тип используемый таким то столбцом таблицы указываемых до ключевого слова.
DECLARE
SUBJECT JEU_12.SUBJECT.SUBJECT%TYPE;
PULPIT JEU_12.SUBJECT.PULPIT%TYPE;…
25. Язык PL/SQL: записи, инструкция %ROWTYPE. Вложенные записи.
Запись - структура данных, представляющая собой совокупность нескольких переменных (различных типов в общем случае), позволяющая хранить и обрабатывать информацию из всех столбцов одной строки некой таблицы. Можно использовать для различных данных, привязка к структуре определенной таблицы необязательна. Создавать можно ссылаясь на структуру какой-то таблицы (audrec auditorium%rowtype), или же вручную объявляя все поля записи (TYPE ADDRESS IS RECORD
(ADDRESS1 VARCHAR2(100),
ADDRESS2 VARCHAR2(100),
ADDRESS3 VARCHAR2(100)
);).
При работе с записями часто употребляется понятие неявного курсора и точной выборки. Неявный курсор – селект-запрос, возвращающий ровно одну строку (точная выборка) и помещающий ее в указанную запись. В дальнейшем с полями данной записи можно работать по-отдельности.
Опция %rowtype объявляет переменную (структуру), имеющую такой же тип вложенных элементов, как и строки задаваемой таблицы.
Вложенные записи – записи, содержащие внутри себя другие записи в качестве элементов.
26. Язык PL/SQL: операторы управления, операторы цикла.
Дата добавления: 2015-11-16; просмотров: 177 | Нарушение авторских прав
<== предыдущая страница | | | следующая страница ==> |
Последовательность СУБД Oracle и ее параметры. | | | Операторы цикла в PLSQL |