Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
СУБД Oracle / Лекции / Лек_ORAC / LA / Создание пакетов.doc
Скачиваний:
44
Добавлен:
16.04.2013
Размер:
173.57 Кб
Скачать

V_ename emp.Ename%type;

V_sal emp.Sal%type;

V_column_value varchar(30) ;

-- Символьная строка с SQL-оператором

sql_statement VARCHAR(200) :=

'SELECT ename, sal FROM ' || p_table_name ||

' WHERE ' || p_column_name || '=:col_value';

--

BEGIN

-- Аргумент в BIND_VARIABLE не может прямо указывать -- на параметр “p_column_value”

v_column_value := upper(p_column_value);

-- Открываем новый курсор

mycursor := dbms_sql.open_cursor ;

-- Связываем SQL-оператор с курсором

dbms_sql.parse(mycursor,sql_statement,dbms_sql.native);

-- Связываем значение v_column_value с переменной

-- 'col_value' из SQL-оператора

dbms_sql.bind_variable(mycursor,'col_value',v_column_value);

-- Определяем выбираемые столбцы

dbms_sql.define_column(mycursor,1,v_ename,30);

dbms_sql.define_column(mycursor,2,v_sal);

-- Выполняем SQL-оператор и выбираем строку

myreturn := dbms_sql.execute(mycursor);

myreturn := dbms_sql.fetch_rows(mycursor);

IF myreturn = 0 THEN

RAISE no_data_found;

END IF;

-- Заполняем переменные. Смотрим, есть ли ещё строки

dbms_sql.column_value(mycursor,1,v_ename);

dbms_sql.column_value(mycursor,2,v_sal);

myreturn := dbms_sql.fetch_rows(mycursor) ;

IF myreturn > 1 THEN

RAISE too_many_rows;

END IF;

-- Присваиваем значения выходным параметрам

p_name := v_ename;

p_salary := v_sal;

-- Закрываем курсор

dbms_sql.close_cursor(mycursor);

-- Если что-то было не так, то …

EXCEPTION

WHEN others THEN

dbms_output.put('error - sqlcode is : ');

dbms_output.put_line(to_char(sqlcode));

dbms_output.put_line('message is : '||sqlerrm);

p_name := null;

END;

/

Вызов описанной процедуры:

Var v_out1 varchar2(10);

Var v_out2 number;

SET serveroutput ON

EXECUTE exec_select('&table_name','&column_name',-

'&column_value',:v_out1,:v_out2);

PRINT v_out1;

PRINT v_out2;

Пакет DBMS_OUTPUT

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

Практическое применение:

  • Можно вывести на экран промежуточные результаты для отладки.

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

Функция или процедура

Описание

PUT

Добавляет текст из процедуры к текущей строке в выходном буфере.

NEW_LINE

Помещает в выходной буфер маркер конца строки.

PUT_LINE

Совмещает действие PUT и NEW_LINE.

GET_LINE

Извлекает текущую строку из выходного буфера и передает ее в процедуру.

GET_LINES

Извлекает из выходного буфера массив строк и передает их в процедуру.

ENABLE или DISABLE

Разрешает или запрещает вызовы процедур DBMS_OUTPUT.

Пакет DBMS_DDL

Пакет DBMS_DDL перекомпилируют процедуры, функции и пакеты, а также анализирует индексы, таблицы и кластеры.

Этот пакет позволяет разработчикам использовать команды COMPILE и ANALYZE SQL через окружение PL/SQL.

Пакет DBMS_DDL не может использоваться в триггерах, процедурах, вызываемых из SQL*Forms, а также в удаленных сеансах.

Практическое применение:

  • Измененные процедуры, функции и пакеты можно перекомпилировать с помощью DBMS_DDL.ALTER_COMPILE.

  • Проанализировать один объект можно с помощью процедуры DBMS_DDL.ANALYZE_OBJECT. (Для одновременного анализа нескольких объектов используется процедураDBMS_UTILITY.ANALYZE_SCHEMA.)

Функция или процедура

Описание

ALTER_COMPILE

Перекомпилирует процедуры, функции и пакеты.

ANALYZE_OBJECT

Анализирует индексы, таблицы и кластеры. Анализ производится для всех строк или процента строк.

Дополнительные характеристики пакетов:

  • Перегрузка

  • Объявление идентификаторов до ссылок на них

  • Процедуры, выполняемые только один раз

  • Уровень чистоты пакетных функций

Примечания

  • Вы можете использовать преимущества стандартных пакетов, поставляемых с сервером Oracle.

  • При разработке приложений можно использовать пакеты как библиотеки подпрограмм.

  • Файл-сценарий catproc.sqlпозволяет создать сразу все пакеты. Каждый пакет может быть создан и отдельным скрипт-файлом.

DBMS_ALERT

dbmsalrt.sql

DBMS_APPLICATION_INFO

dbmsutil.sql

DBMS_DDL

dbmsutil.sql

DBMS_LOCK

dbmslock.sql

DBMS_MAIL

dbmsmail.sql

DBMS_OUTPUT

dbmsotpt.sql

DBMS_PIPE

dbmspipe.sql

DBMS_SESSION

dbmsutil.sql

DBMS_SHARED_POOL

dbmsspool.sql

DBMS_SQL

dbmssql.sql

DBMS_TRANSACTI0N

dbmsutil.sql

DBMS_UTILITY

dbmsutil.sql

Резюме

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

  • Улучшает организацию, управление и защиту. Повышает производительность.

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

  • Позволяет модифицировать тело пакета, не затрагивая спецификацию.

  • Позволяет предоставить право доступа ко всему пакету.

При использовании пакетов:

  • Исходный код скрыт от пользователей.

  • При первом вызове в память загружается весь пакет.

  • Уменьшается количество обращений к диску для последующих вызовов.

  • Предоставляются идентификаторы для сеанса пользователя.

Соседние файлы в папке LA