Хранимые функции (STORED FUNCTIONS)


Прототип хранимой функции

CREATE [OR REPLACE] FUNCTION function_name
[( parameter1     [IN][OUT] [NOCOPY] sql_datatype | plsql_datatype
[, parameter2     [IN][OUT] [NOCOPY] sql_datatype | plsql_datatype
[, parameter(n+1) [IN][OUT] [NOCOPY] sql_datatype | plsql_datatype )]]]
RETURN [ sql_data_type | plsql_data_type ]
[ AUTHID [ DEFINER | CURRENT_USER ]]
[ DETERMINISTIC | PARALLEL_ENABLED ]
[ PIPELINED ]
[ RESULT_CACHE [ RELIES ON table_name ]] IS
  declaration_statements
BEGIN
  execution_statements
  RETURN variable;
[EXCEPTION]
  exception_handling_statements
END [function_name];
/

Функция подобна процедуре за тем лишь исключением, что функция должна возвращать значение в ту точку, в которой она вызывается.


Создание функции

Для создания функции используется оператор CREATE FUNCTION. Упрощенный синтаксис синтаксис имеет следующий вид:

CREATE [OR REPLACE] FUNCTION function_name
[(parameter [IN | OUT | IN OUT] тип [, …])]
RETURN type
IS | AS
BEGIN
 execution_statements
RETURN variable;

END function_name;
  • DETERMINISTIC - подсказка оптимизатору, позволяющая системе использовать сохраненную копию возвращенного функцией результата (при его наличии). Оптимизатор запроса определяет, следует ли выбрать сохраненную копию или же вызвать функцию повторно.
  • PARALLEL_ENABE - подсказка оптимизатору, решающая параллельное выполнение функции при вызове из оператора SELECT.
  • PIPELINED - указывает, что результаты табличной функции должны возвращаться построчно с помощью команды PIPE ROW.


Получение информации о функции

SELECT ojbect_name, aggregate, parallel
FROM user_procedures
WHERE objectt_name IN ('function1' , 'function2');