Студопедия
Случайная страница | ТОМ-1 | ТОМ-2 | ТОМ-3
АрхитектураБиологияГеографияДругоеИностранные языки
ИнформатикаИсторияКультураЛитератураМатематика
МедицинаМеханикаОбразованиеОхрана трудаПедагогика
ПолитикаПравоПрограммированиеПсихологияРелигия
СоциологияСпортСтроительствоФизикаФилософия
ФинансыХимияЭкологияЭкономикаЭлектроника

Extractvalue.

Процесс-слушатель Oracle и его основные параметры. Сетевые настройки Oracle. | Метод аутентификации | Типы данных базы данных Oracle. | Изменение физических атрибутов таблицы | Удаление таблиц | Создание индексов связанных с ограничением целостности | Последовательность СУБД Oracle и ее параметры. | Системные и объектные привилегии СУБД Oracle. | Операторы цикла в PLSQL | Конструкция CURRENT OF применяется для обращения к последней просмотренной в курсоре строке с целью ее изменения или удаления из таблицы. |


Служит для получения значения требуемого тега (требуемый тег задается при помощи xpath). Возвращает именно значение, отбрасывая xml-теги.

EXISTSNODE.

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

SELECT id, b.description.XMLDATA
FROM books b
WHERE b.description.EXISTSNODE('/cover[author="Sanjay Mishra"]')=1;

GETSTRINGVAL() – используется для получения строки varchar2 из содержимого объекта xmltype (преобразует кодировку, но возвращает все теги).

GETROOTELEMENT.

Для получения корневого элемента документа.

XMLELEMENT.

Эта функция создает элемент XML из задаваемого выражения. В простейшем виде она имеет следующий синтаксис:

XMLElement(NAME имя_элемента, имя_столбца)

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

SELECT XMLElement(NAME "TchName", t.Name)

FROM TEACHER t

WHERE t.TchPK = 1;

--

XMLELEMENT(NAME "TCHNAME”, T.NAME)

<TchName>BH6poBCKiM</TchName>

XMLATTRIBUTES.

Функция XMLAttributes используется для указания атрибутов элемента. Она может использоваться только в составе функции XMLElement и имеет следующий синтаксис:

XMLAttributes(столбец [AS имя_атрибута][, столбец [AS имя_атрибута]]..,)

Список ее аргументов содержит имена столбцов (или выражений над столбцами) с возможными именами атрибутов. Если имена атрибутов отсутствуют, в их

качестве используются имена столбцов.

XMLAGG.

Функция XMLAgg относится к классу агрегатных функций SQL. На вход к ней подается множество строк одной из выделенных групп таблицы. По каждой из

таких строк формируется значение XML согласно аргументу функции. И затем эти значения XML сцепляются в одно значение XML. Синтаксис функции

следующий:

XMLAGG(ХМL_значение [ORDER BY порядок_сортировки])

SELECT XMLELEMENT("TEACHER", XMLATTRIBUTES(T.TEACHER AS "ID", T.TEACHER_NAME AS "NAME")) AS "RESULT" INTO VARXM FROM TEACHER T WHERE TEACHER LIKE ID;

SELECT XMLELEMENT("PULPIT", XMLATTRIBUTES(T.PULPIT AS "ID", SYSDATE AS "DATE", COUNT(*) AS "TOTAL"), XMLAGG(XGET_TEACHER(T.TEACHER))) INTO VARXM FROM TEACHER T WHERE PULPIT=ID GROUP BY PULPIT;

SELECT XMLROOT(XTEXT, VERSION '1.0', STANDALONE YES) INTO VARXM FROM DUAL;

 

 

36. Процедурные объекты: хранимые процедуры.

Храни́мая процеду́ра — объект базы данных, представляющий собой набор SQL-инструкций, который компилируется один раз и хранится на сервере. Хранимые процедуры очень похожи на обыкновенные процедуры языков высокого уровня, у них могут быть входные и выходные параметры и локальные переменные, в них могут производиться числовые вычисления и операции над символьными данными, результаты которых могут присваиваться переменным и параметрам. В хранимых процедурах могут выполняться стандартные операции с базами данных (как DDL, так и DML). Кроме того, в хранимых процедурах возможны циклы и ветвления, то есть в них могут использоваться инструкции управления процессом исполнения.

Три типа параметров:
IN

OUT

INOUT.

Благодаря выходным параметрам процедура может косвенно возвращать результаты выполнения к точке вызова.

Необходимые привилегии:
GRANT CREATE PROCEDURE TO JEU_12;

Синтаксис:

CREATE OR REPLACE PROCEDURE XSUM(

MIN_CY IN AUDITORIUM.AUDITORIUM_CAPACITY%TYPE,

MAX_CY IN OUT AUDITORIUM.AUDITORIUM_CAPACITY%TYPE,

N_AUD OUT NUMBER)

IS

M_MAX_CY AUDITORIUM.AUDITORIUM_CAPACITY%TYPE;

M_N_AUD NUMBER:= 0;

BEGIN

SELECT COUNT(*), MAX(AUDITORIUM_CAPACITY) INTO M_N_AUD, M_MAX_CY FROM AUDITORIUM

WHERE AUDITORIUM_CAPACITY>=MIN_CY AND AUDITORIUM_CAPACITY<=MAX_CY;

MAX_CY:=M_MAX_CY;

N_AUD:=M_N_AUD;

EXCEPTION

WHEN OTHERS THEN DBMS_OUTPUT.PUT_LINE(SQLERRM);

END XSUM;

Вызов процедур:

DECLARE

MIN_CY NUMBER;

MAX_CY NUMBER;

N_AUD NUMBER;

BEGIN

MIN_CY:= 10;

MAX_CY:= 40;

 

XSUM(

MIN_CY => MIN_CY,

MAX_CY => MAX_CY,

N_AUD => N_AUD

);

DBMS_OUTPUT.PUT_LINE('MAX_CY = ' || MAX_CY);

DBMS_OUTPUT.PUT_LINE('N_AUD = ' || N_AUD);

END;

37. Процедурные объекты: хранимые функции.

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

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

Синтаксис:

CREATE OR REPLACE FUNCTION SELCY(

MIN_CY IN AUDITORIUM.AUDITORIUM_CAPACITY%TYPE,

MAX_CY IN OUT AUDITORIUM.AUDITORIUM_CAPACITY%TYPE

)

RETURN NUMBER IS

RC NUMBER(5);

BEGIN

SELECT COUNT(*), MAX(AUDITORIUM_CAPACITY) INTO RC, MAX_CY FROM AUDITORIUM

WHERE AUDITORIUM_CAPACITY>=MIN_CY AND AUDITORIUM_CAPACITY<=MAX_CY GROUP BY MAX_CY;

RETURN RC;

EXCEPTION

WHEN OTHERS THEN RETURN -1;

END SELCY;

Вызов функций в plsql блоках:

DECLARE

MIN_CY NUMBER;

MAX_CY NUMBER;

v_Return NUMBER;

BEGIN

MIN_CY:= 20;

MAX_CY:= 60;

 

v_Return:= SELCY(

MIN_CY => MIN_CY,

MAX_CY => MAX_CY

);

DBMS_OUTPUT.PUT_LINE('MAX_CY = ' || MAX_CY);

DBMS_OUTPUT.PUT_LINE('v_Return = ' || v_Return);

END;

Функции можно вызывать и в рамках обычных sql-запросов, однако при этом на функции накладываются дополнительные ограничения:

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

- INSERT,UPDATE, DELETE: не может DML c таблицей, заданной в операторе;

- параллелизация DML: не может модифицировать таблицы;

- DML: нельзя TCL, ALTER SESSION, SET ROLE, ALTER SYSTEM;

- вызываемые функции: имеют те же ограничения;

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

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

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

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

 

38. Процедурные объекты: пакеты.

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

Это означает, что на время сессии значения этих пере

менных хранятся ораклом и при последующих обращениях в рамках одной сессии пользователь “застает их в том же виде, как оставил их в прошлый раз”.

Особенностью пакетов так же является то, что они хранятся в виде двух компонент:

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

- тело – содержит реализацию функций и процедур.

Разделение отчасти сделано для возможности позднего связывания зависимых функций и процедур.

Пример:

CREATE OR REPLACE

PACKAGE TESTPACK AS

N NUMBER(15);

FUNCTION PRSLT(F NUMBER, S NUMBER) RETURN NUMBER;

PROCEDURE EXRSLT(K NUMBER, F NUMBER, S NUMBER);

END TESTPACK;

 

CREATE OR REPLACE PACKAGE BODY TESTPACK AS

FUNCTION PRSLT(F NUMBER, S NUMBER) RETURN NUMBER

IS

TB NUMBER(15);

BEGIN

TB:=POWER(F, S);

DBMS_OUTPUT.PUT_LINE('N IN PRSLT = '||N);

RETURN TB;

EXCEPTION

WHEN OTHERS THEN DBMS_OUTPUT.PUT_LINE(SQLERRM);

END PRSLT;

 

PROCEDURE EXRSLT(K NUMBER, F NUMBER, S NUMBER)

IS

TB NUMBER(15);

BEGIN

TB:=PRSLT(F, S);

TB:=TB*K;

DBMS_OUTPUT.PUT_LINE('N IN EXRSLT = '||N);

DBMS_OUTPUT.PUT_LINE('TB = '||TB);

EXCEPTION

WHEN OTHERS THEN DBMS_OUTPUT.PUT_LINE(SQLERRM);

END EXRSLT;

 

END TESTPACK;

--использование пакетов

BEGIN

TESTPACK.N:=10;

TESTPACK.EXRSLT(3, 5, 2);

END;

 

 

39. Процедурные объекты: триггеры.

Три́ггер (англ. trigger) — это хранимая процедура особого типа, которую пользователь не вызывает непосредственно, а исполнение которой обусловлено действием по модификации данных: добавлением INSERT, удалением DELETE строки в заданной таблице, или изменением UPDATE данных в определенном столбце заданной таблицы реляционной базы данных. Триггеры применяются для обеспечения целостности данных и реализации сложной бизнес-логики. Триггер запускается сервером автоматически при попытке изменения данных в таблице, с которой он связан. Все производимые им модификации данных рассматриваются как выполняемые в транзакции, в которой выполнено действие, вызвавшее срабатывание триггера. Соответственно, в случае обнаружения ошибки или нарушения целостности данных может произойти откат этой транзакции.

Типы триггеров Oracle:

DML/Instead of/System

Before/After

Insert/update/delete

For each rows/operators

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


Дата добавления: 2015-11-16; просмотров: 342 | Нарушение авторских прав


<== предыдущая страница | следующая страница ==>
Методы и исключения для работы с коллекциями| INSTEAD OF-триггеры в Oracle

mybiblioteka.su - 2015-2024 год. (0.014 сек.)