Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Database management system - CODE - TEORY.docx
Скачиваний:
4
Добавлен:
23.04.2019
Размер:
55.38 Кб
Скачать

Pl/sql: курсоры (неявные и явные)

Курсор Oracleуказатель на область в PGA (контекстная область) в которой хранится: 1)строки запроса, 2)число строк, 2)указатель на разобранный запрос в общем пуле.

(Курсор - механизм, позволяющий обрабатывать отдельные строки полученные в результате select-запроса. Курсор - область памяти сервера, предназначенная для хранения и обработки результата select-запросаи характеризующаяся атрибутами. Неявный курсор - курсор не требующий объявления.)

Что такое атрибут курсора? Перечислите все атрибуты курсора и объясните их назначение.

Атрибут курсора - это параметр, который позволяет отследить состояние курсора.

FOUND - статус выборки (TRUE - данный найдены, FALSE - данные не найдены)

Isopen - Открыт курсор (для неявных всегда false)

NOTFOUND - статус выборки (TRUE - данный не найдены, FALSE - данные найдены)

ROWCOUNT - количество обработанных строк

В чем отличие явного и неявного курсоров.

Неявные курсоры вызываются всякий раз, когда в PL/SQL используется оператор SELECT. Они могут использоваться только в операторах, которые возвращают не более одной строки. Не явные курсоры не требуют объявления и открытия, в то время как явные курсоры нужно объявить, открыть, считать и закрыть. Но явные курсоры позволяют обрабатывать запрос, возвращающий несколько строк.

Объясните схему работы с явным курсором в PL/SQL-блоке.

declare -объявили курсор, open - открыли курсор, fetch - считали данные, close - закрыли курсор

Что происходит по команде OPEN курсора?

Определяются строки, которые доступны в курсоре и делаются доступными для PL/SQL

Объясните особенность применения FOR-цикла при работе с явным курсором.

Особ-сть этого цикла закл-тся в том, что в цикле необходимо указать только сам курсор и переменную, в которую будет проводится считывание, а операции open, fetch и close цикл выполнит самостоятельно.

Для чего применяются параметры курсора?

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

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

Что такое курсорная переменная? Как ее можно объявить?

Курсорная переменная - это переменyая, к которой можно присвоить курсор.

сначала объявить тип

declare type tlesson_type is ref cursor return tlesson%rowtype;

потом саму переменную

cur_var tlesson_type;

Объясните назначение конструкции RETURNING в операторах INSERT, DELETE, UPDATE.

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

Открытие курсора создание контекстной области PGA (создается моментальный снимок (snapshot) данных запроса).

WHERE CURRENT OF – определяет только что считанную строку.

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

ROWNUM-используется для ограничения кол-ва выводимых записей.

ROWNUM - логический номер записи. Позволяет управлять порядком и количеством извлекаемых записей. SELECT * FROM employees WHERE ROWNUM < 10;

Процедуры. Функции.

create or replace

PROCEDURE AAA

IS

BEGIN

dbms_output.put_line('Text from AAA');

END AAA;

create or replace

function bbb

return number

is

begin

return 1;

end bbb;

Перечислите числовые встроенные функции, исследованные в лабораторной работе.

CEIL - Округлить в большую сторону

FLOOR - Округлить в меньшую сторону

MOD - Остаток от деления

POWER - Взять в степень

SIGN - получить -1 или 1

GREATEST - получить самое большее из всех чисел

32. Перечислите встроенные функции для работы с датами, исследованные в лабораторной работе.

SYSDATE - Получить системную дату

LOCALTIMESTAMP - Получить дату в формате LOCALTIMESTAMP

TO_DATE - Преобразовать строку или дату к дате с заданным форматом

TO_CHAR - Преобразовать дату в строку (можно не только дату)

NEXT_DAY - Получить ближайшую дату заданного деня недели

LAST_DAY - Получить поледнее число месяца

SYS_EXTRACT_UTC - извлечь дату в формате UTC

ROUND - Округлить дату по заданной части (день, месяц, год и т.д)

33. Перечислите встроенные функции конвертации, исследованные в лабораторной работе.

TO_DATE - Преобразовать строку или дату к дате с заданным форматом

TO_CHAR - Преобразовать дату в строку (можно не только дату)

TO_NUMBER - Преобразовать в число

34. Объясните назначение встроенных функций sqlcode и sqlerrm.

SQLCODE - Возвращает код ошибки

SQLERRM - Возвращает ссобщение произошедшей ошибки

35. Что такое PL/SQL-тип данных запись? Перечислите способы создания, и принцип применения.

PL/SQL-тип данных запись - это тип данных, инкапсулирующий в себе несколько переменных одного или нескольких типов.

Можно самостоятельно объявить используя оператор TYPE, а можно копировать структуру строки таблицы используя функцию ROWTYPE

36. Что такое локальные процедуры и функции PL/SQL?

Локальные процедуры и функции - это такие процедуры и функции, которые создаются во время выполнения программы. (Объявляются в области DECLARE)

37. Перечислите типы PL/SQL-коллекций. Объясните чем они отличаются. Перечислите основные методы коллекций.

Коллекции: ассоциативные массивы = индексные таблицы (массивы, доступ к которым осуществляется не по индексу, а по ключу),

вложенные таблицы - таблицы, содержащие в себе строки, являющиеся объектами(в отличие от массивов переменной длины размер не ограничен сверху),

массивы переменной длины - объект, содержащий какое-то количество объектов одного типа (размер ограничен сверху

т.е. нужно его указать зарание).

38. Что такое исключение? встроенное исключение? пользовательское исключение?

Объясните назначение и принцип применения оператора RAISE и функции RAISE_APPLICATION_ERROR.

Объясните принцип распространения исключения.

Исключение - прерывание, которое возникает при наступлении какого-либо события.

Встроенное исключение - исключение, которое определено в субд.

пользовательское исключение - исключение, которое определил пользователь.

функция raise генерирует исключение (аналог throw в C-подобных языках) RAISE_APPLICATION_ERROR - сгенерировать исключение,

которое должено отловить блок others

39. Что такое динамический SQL? Объясните принцип его применения.

Динамический SQL - это SQL, который генерируется и выполняется в блоке PL/SQL. Применяется для написания кода,

адаптирующегося к структуре таблиц.

40. Чем отличаются процедуры от функций? Что такое локальные процедуры и функции?

Что такое параметрическая, позиционная и смешанная формы передачи параметров?

Объясните действие опций AUHIUD CURRENT_USER/DEFINER.

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

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

указывется какому параметру какой соответствует, а позиционная - это такая форма, в которой параметры указываются в том

порядке, который был указан при объявлении функции или процедуры.

41. Перечислите основные ограничения на применение функций в операторе SELECT.

- SELECT не может модифицировать таблицы;

- функция должна быть хранимой: нельзя использовать локальные функции;

- параметры только IN: нельзя OUT, IN OUT;

- формальные параметры: имеют тип базы данных или CREATE TYPE;

- возвращаемый тип: тип базы данных или CREATE TYPE.

42. Что значит «пакет сохраняет состояние переменных, объявленных в спецификации, на время сессии»?.

Это значит, что данные, которые объявлены в пакете не теряют своего значения до конца текущей сессии.

Динамический SQL. Триггер. Временная таблица.

CREATE OR REPLACE TRIGGER BAO_1 AFTER INSERT ON AAA

BEGIN

DBMS_OUTPUT.PUT_LINE('BAO_1');

END;

CREATE OR REPLACE TRIGGER BAS_1 BEFORE INSERT ON AAA FOR EACH ROW

BEGIN

DBMS_OUTPUT.PUT_LINE('BAS_1');

END;

CREATE OR REPLACE TRIGGER BAO_1 AFTER INSERT OR UPDATE OR DELETE ON AAA

BEGIN

IF INSERTING THEN

DBMS_OUTPUT.PUT_LINE('BAO_1 INSERTING');

ELSIF UPDATING THEN

DBMS_OUTPUT.PUT_LINE('BAO_1 UPDATING');

ELSIF DELETING THEN

DBMS_OUTPUT.PUT_LINE('BAO_1 DELETING');

END IF;

END;

Объясните способ создания временных таблиц Oracle и принципы работы с ними.

Временные таблицы можно создать командой CREATE GLOBAL TEMPORARY TABLE <ИМЯ> <ОПЦИЯ> AS SELECT * FROM <ИМЯ_ТАБЛИЦЫ>Все они являются шабонами таблиц. Каждому пользователю выделяется собственный сегмент в его TEMP-TABLESPACE и он видит только свои записи

24. Объясните назначение опций временных таблиц: ON COMMIT PRESERVE ROWS, ON COMMIT DELETE ROWS.

ON COMMIT PRESERVE ROWS - Сохраняет данные на время сеанса

ON COMMIT DELETE ROWS - Сохраняет данные на время транзакции (Любой COMMIT или ROLLBACK очистит таблицу)

25. Перечислите типы триггеров поддерживаемых Oracle.

Типы триггеров: DML – триггеры, триггеры замещения (instead-of), системные триггеры.

26. Можно выполнять TCL-операторы в триггерах Oracle. Если да, то при каких условиях?

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

27. Поясните правило: триггер является частью транзакции.

DML-триггер – это часть транзакции: не может выдавать COMMIT/ROLBACK

(может только, если в теле триггера автономная транзакция),может выдавать RAISE_SPPLICATION_ERROR.

28. Перечислите привилегии необходимые для работы с триггерами.

Привилегии на триггер: назначаются напрямую USERу, а не через роль.

? CREATE TRIGGER (создавать, удалять изменять в своей подсхеме);

? CREATE ANY TRIGGER (создать любой триггер в любой схеме, кроме SYS, не рекомендуется для словаря, не разрешает менять текст триггера);

? ALTER ANY TRIGGER (разрешать, запрещать, изменять, компилировать, любые, кроме SYS-триггеров, триггеры) ;

? DROP ANY TRIGGER (удалять любой триггер, кроме SYS-триггеров);

? ADMINISTER DATABASE TRIGGER (создавать, изменять, удалять системные триггеры, должен иметь привилегию CREATE TRIGGER или CREATE ANY TRIGGER).

29. Перечислите события, на которые могут срабатывать DML-триггеры.

INSERT, DELETE, UPDAТE

30. Объясните, что такое BEFORE-триггеры и AFTER-триггеры.

В каких случаях нельзя обойтись только BEFORE-триггерами или только AFTER-триггерами.

BEFORE - Это тип триггера, который выполняется до наступления события.

AFTER - Это тип триггера, который выополняется после фиксации события.

31. Перечислите уровни срабатывания триггеров.

FOR EACH ROW (для каждой строки)

ПО УМОЛЧАНИЮ (операторный уровень).

32. Поясните принцип применения INSTEAD OF-триггеров в Oracle.

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

XML

create table report

(

id_report number(6) not null,

xml_report xmltype not null,

constraint pk_report primary key (id_report)

);

  1. Что такое XML?

XML (англ. eXtensible Markup Language — расширяемый язык разметки) — текстовый формат, предназначенный для хранения структурированных данных (взамен существующих файлов баз данных), для обмена информацией между программами, а также для создания на его основе более специализированных языков разметки (например, XHTML). XML является упрощённым подмножеством языка SGML.

  1. Для чего необходим тип XMLTYPE.

тип XML. Дает возможность сообщить БД, что заносимый текст – это не просто строка, а строка документа XML.

  1. Назначение функции XMLTYPE (конструктор).

служит для создания таблицы объектов типа XMLTYPE, «таблицы документов XML».

  1. Назначение функции EXTRACTVALUE.

извлекает значения элемента из документа XML.

  1. Назначение функции EXISTSNODE.

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

  1. Назначение XML-метода GETSTRING.

извлекает строку из документа XML.

  1. Назначение XML-метода GETROOTELEMENT.

извлекает корневой элемент из документа XML.

  1. Назначение функции XMLELEMENT.

создаёт в XML новый элемент и помещает значение из таблицы

  1. Назначение функции XMLATTRIBUTES.

создаёт в XML новый атрибут и помещает значение из таблицы

  1. Назначение функции XMLAGG.

агрегирующая функция, допускающая использование в запросах группировку GROUP BY

LOB

create table teacher

(

teacher char(20 char),

teacher_name varchar2(200),

pulpit char(20),

foto blob,

doc bfile

)

lob (foto) store as blob_sg

(

tablespace TES_T_RICRO_LOB

);

create directory RICROSCAPE as 'D:\LAB14';

insert into teacher values ('ШМНД', 'Шиман Дмитрий Васильевич', 'ИСиТ', EMPTY_BLOB(), BFILENAME('AAA', 'ШМНД.doc'));

select * from teacher;

declare

src_file bfile;

dst_file blob;

lgh_file binary_integer;

begin

src_file := BFILENAME('RICROSCAPE', 'No mans land.jpg');

dbms_lob.fileopen(src_file, dbms_lob.file_readonly);

lgh_file := dbms_lob.getlength(src_file);

select foto into dst_file from teacher where teacher = 'RICRO' for update;

dbms_lob.loadfromfile(dst_file, src_file, lgh_file);

update teacher set foto = dst_file where teacher = 'RICRO';

commit;

dbms_lob.fileclose(src_file);

end;

Для каких целей применяются большие объекты Oracle (LOB).

Хранение файлов, больших текстов, картинок, мультимедиа и т.д. в базе данных

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]