Россия, Рубцовск |
Опубликован: 25.07.2012 | Уровень: специалист | Доступ: платный
Дополнительный материал 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.