Опубликован: 25.07.2012 | Доступ: свободный | Студентов: 1760 / 106 | Оценка: 4.80 / 4.60 | Длительность: 07:59:00
Дополнительный материал 1:
Приложение А. Пример генератора пакетов PL/SQL
Разработанный вручную код
В коде приложения всегда содержится код, который надо разработать вручную. Прежде чем рассмотреть код тела сгенерированного пакета для лучшего его понимания изучим применяемые разработанные вручную пакеты. Это два пакета types и pkg_lib, которые вызываются из генерируемых пакетов.
Пакет types содержит только объявление ссылки на курсор REF CURSOR. Она используется в тех процедурах пакета, где требуется извлечь записи - результат запроса SELECT. Это сделано таким образом, чтобы другое приложение, например веб-страница, могла вызвать нужную ей процедуру и получить соответствующий набор записей.
create or replace package types is
type ref_cursor is REF CURSOR;
end types;
В пакете pkg_lib содержатся функции работы со строками. Используются они для формирования отдельных частей запросов SELECT.
create or replace package pkg_lib as
function fun_add_equal(p_name varchar2, p_value varchar2, p_def varchar2) return varchar2;
function fun_add_equal_m1(p_name varchar2, p_value varchar2) return varchar2;
function fun_add_like(p_name varchar2, p_value varchar2) return varchar2;
function fun_sorting_query(p_order_by varchar2, p_order_type varchar2, p_def varchar2) return varchar2;
end pkg_lib;
Пример
A.4.
Тело пакета pkg_lib:
create or replace package body pkg_lib as
function fun_add_equal(p_name varchar2, p_value varchar2, p_def varchar2) return varchar2 is
p_result varchar2(2000 char):='';
begin
if p_value <> p_def then
p_result := p_result || 'and ' || p_name || ' = ' || '''' || p_value || '''';
end if;
return p_result;
end;
function fun_add_equal_m1(p_name varchar2, p_value varchar2) return varchar2 is
begin
return fun_add_equal(p_name, p_value, '-1');
end;
function fun_add_like(p_name varchar2, p_value varchar2) return varchar2 is
p_result varchar2(2000 char):='';
begin
if length(p_value) > 0 then
p_result := p_result || ' and lower (' || p_name || ') like lower (''%' || p_value || '%'')';
end if;
return p_result;
end;
function fun_sorting_query(p_order_by varchar2, p_order_type varchar2, p_def varchar2) return varchar2 is
p_result varchar2(2000 char) :=' order by ';
p_order_temp varchar2(2000 char);
p_type_temp varchar2(2000 char);
begin
if length(p_order_by) > 0 then
p_order_temp := p_order_by;
else
p_order_temp := p_def;
end if;
if length(p_order_type) > 0 then
p_type_temp := p_order_type;
else
p_type_temp := 'asc';
end if;
return p_result || ' ' || p_order_temp || ' ' || p_type_temp;
end;
end pkg_lib;
Пример
A.5.