КАТЕГОРИИ: Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748) |
Вызов хранимых подпрограмм
Begin Процедуры и функции Процедура/функция (подпрограмма) объявляется в конце раздела Declare любого блока PL/SQL и имеет следующую структуру: Procedure/Function <имя> [(<объявление параметра>,...)] [ Return <тип>] {As | Is} [<объявления локальных объектов>] <операторы обработки> Return [<возвращаемое значение функции> --завершение работы] [ Exeption <операторы обработки исключительных ситуаций, включая Return>] End [<имя процедуры/функции>]; Параметр объявляется в виде: <имя параметра> [ in | out | in out] <тип параметра>[:=<значение>] В типе параметра размерность не указывается. Допускается позиционная и именованная запись фактических параметров (<имя формального параметра> = <значение параметра>) одновременно (позиционные параметры располагаются в начале списка параметров). Пример создания функции возвращающей сумму продаж товаров. Create or replace function Sumprod () return number as Sump number:= 0.0; Begin Select sum(stoim) into Sump from prodaga_tovarov; return Sump; End; Для того чтобы подпрограммы хранились в базе данных и были общедоступными в виде хранимых процедур или функций, они должны быть созданы SQL‑операторами: Create [ or replace ] procedure/function [<схема>.]<имя процедуры/функции> <параметры и тело процедуры/функции> or replace ‑ указывает замещение старого текста подпрограммы. Одна хранимая подпрограмма может вызывать другую. Обращения к хранимым функциям могут появляться в процедурных предложениях, но не в предложениях SQL. Приложение предкомпилятора или приложение OCI может вызывать хранимые подпрограммы из анонимных блоков PL/SQL. Пример вызова процедур create_dept из предкомпилятора. exec sql execute begin create_dept(:name,:location); end; end-exec; Фактические параметры:name и:location - это хост-переменные (переменные, объявленные во внешней среде, например в языках программирования). Пример вызова процедуры create_dept из пакет emp_actions. exec sql execute begin emp_actions.create_dept(:name,:location); end; end-exec; Пример вариантов вызова процедуры create_dept из SQL*Plus. sql> execute create_dept('marketing', 'new york'); sql> begin create_dept('marketing', 'new york'); end; Пример создания процедуры вывода в таблицу суммы продаж товаров и налога на добавленную стоимость за текущий день. Create or replace Procedure z_ prodaga_tovarov (stoimost_tovara in number, nds in number:=0.2) as Begin Insert into prodaga_tovarov values (sysdate, stoimost_tovara, nds * stoimost_tovara); End; Для уничтожения подпрограммы используется SQL‑оператор: Drop procedure/function [<схема>.]<имя процедуры/функции> Перезагружаемыми подпрограммами называются подпрограммы с одинаковыми именами, но с различными параметрами. Oracle автоматически вызывает нужную подпрограмму по набору фактических параметров (аргументов). Для вызова встроенной подпрограммы, при наличии одноименной подпрограммы пользователя, эта подпрограмма уточняется именем пакета standard (x:=standard.sign(x)). Рекурсивная подпрограмма содержит вызов этой же подпрограммы. Каждый рекурсивный вызов создает новый набор всех элементов подпрограммы (параметры, переменные, курсоры, исключения и др.). Пример рекурсивной подпрограммы вычисления факториала числа n: n!=n*(n-1)! Function factorial (n integer) Return integer is Begin if n=1 then return 1; else return n* factorial (n-1); endif; end factorial; Пример процедуры, которая устанавливает новый оклад сотруднику. procedure izmenit_oklad (tabn number, novii_oklad real) is oklad_otsutstvuet exception; --исключение (п. 5.4.9) begin if novii_oklad is null then raise oklad_otsutstvuet;--генерация исключения (п. 5.4.9) else update oklad set oklad = novii_oklad where tn=tabn; end if; exception --обработка исключений (п. 5.4.9) when no_data_found then --отстутствует строка в запросе insert into sotr_audit values ('Отсутствует сотрудник с таб. N ', tabn); when oklad_otsutstvuet then --отсутствует значение нового оклада insert into sotr_audit values (‘Оклад отсутствует для сотр. c таб. N ’,tabn); end izmenit_oklad; Пример функции контроля оклада на диапазон допустимых значений для указанного кода должности. function oklad_ok (oklad real, koddolg real) return boolean is min_oklad real; max_oklad real; begin select minoklad, maxoklad into min_oklad, max_oklad from dolgnosti where kd=koddolg; return (oklad >= min_oklad) and (oklad <= max_oklad); end oklad _ok;
Дата добавления: 2014-12-10; Просмотров: 397; Нарушение авторских прав?; Мы поможем в написании вашей работы! Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет |