PL/SQL Хранимые процедуры и функции
Процедуры [CREATE [OR REPLACE]] PROCEDURE procedure_name[(parameter[, parameter]...)] {IS | AS} [local declarations] BEGIN executable statements [EXCEPTION exception handlers] END [name];
Процедуры: параметры parameter_name [IN | OUT | IN OUT] datatype [{:= | DEFAULT} expression] IN: для входных параметров (значения доступны в теле программы) OUT: для выходных (для передачи параметров за пределы процедуры) Для типов данных нельзя задавать размер
Пример: CREATE OR REPLACE PROCEDURE double_name(name IN OUT VARCHAR2) IS BEGIN name := name || name; END;
Функции [CREATE [OR REPLACE ] ] FUNCTION function_name [ ( parameter [, parameter ]... ) ] RETURN datatype {IS | AS} [ local declarations ] BEGIN executable statements [ EXCEPTION exception handlers ] END [ name ];
Пример функции: CREATE OR REPLACE FUNCTION compute_discounts(order_amt NUMBER) RETURN NUMBER IS small_order_amt NUMBER := 400; large_order_amt NUMBER := 1000; small_disct NUMBER := 1; large_disct NUMBER := 5; BEGIN IF (order_amt = small_order_amt) THEN RETURN (order_amt + order_amt * small_disct / 100); ELSIF (order_amt >= large_order_amt) THEN RETURN (order_amt+ order_amt * large_disct / 100); ELSE RETURN (order_amt); END IF; END;
Функции После определения функций к ним можно обращаться напрямую из запросов: SELECT compute_discounts(10) FROM dual;