Процедуры и функции основные места, где разрешено использования процедурного расширения, что позволяет решать более сложные задачи. Процедуры не возвращают значений, как это делают функции, однако результат их работы можно сохранить в аргументах. Для этого им надо задать атрибут OUT, по умолчанию же аргументы обычно имеют атрибут IN.
Некоторые СУБД позволяют перегрузку, т.е. создание нескольких процедур или функций с одним именем, но с разным числом или типами аргументов.
Использование хранимых процедур уменьшает нагрузку на клиентские машины, за счет нагрузки на сервер. Во-вторых, они облегчают разработку клиентских программ, особенно их модернизацию. Так как при незначительных изменениях хранимой процедуры не нужно компилировать заново клиентскую программу (вызывающую хранимую процедуру) и раздавать новые версии пользователям.
Для примера создадим процедуру вставки пяти записей в следующую таблицу:
create table tblname ( id integer, i integer, constraint pk_tblname primary key(id) );
Oracle
В Oracle можно задать аргументам значения по умолчанию. Конструкция OR REPLACE позволяет пересоздать процедуру, если она существует без вывода сообщения об ошибке. Для уничтожения процедуры служит команда DROP PROCEDURE. Перегрузка разрешена только внутри пакетов.
-- создание процедурыCREATE OR REPLACE PROCEDURE insert5(n IN OUT integer) AS o integer :=n; -- локальная переменнаяBEGIN delete from tblname where id < 6; insert into tblname values(1,o); insert into tblname values(2,o); insert into tblname values(3,o); insert into tblname values(4,o); insert into tblname values(5,o); commit; n:=5;END insert5; -- уничтожение процедурыdrop procedure insert5;