Как уже указывалось, процедуры создаются посредством инструкции PL/SQL CREATE PROCEDURE:
сreate[or replace] procedure имя_процедуры [(аргумент1 [{in | out | in out}] тип, … аргумент2 [{in | out | in out}] тип)] {is|as} тело процедуры/
Чтобы изменить текст процедуры, её необходимо удалить, а затем повторно создать. Во время разработки процедур эта операция повторяется достаточно часто, поэтому ключевые слова OR REPLACE позволяют выполнить такую операцию за один раз. Если процедура существует, то она удаляется без всякого предупреждения (в данном случае вызов инструкции DROP PROCEDURE не требуется), если же не существовала, то она просто создаётся.
Параметры IN, OUT и IN OUT используются как при создании процедур, так и функций. Смысл параметра INв следующем: Значение физического параметра передаётся в функцию. Внутри процедуры формальный параметр рассматривается в качестве константы PL/SQL (параметр только для чтения) и не может быть изменен. Когда процедура завершается, и управление программой передаётся в вызывающую среду, фактический параметр не изменяется. При использовании параметра OUT, любое значение, которое имеет фактический параметр при вызове процедуры, игнорируется. Внутри процедуры формальный параметр рассматривается в качестве неинициализированной переменной, т. е содержит NULL – значение, и можно как записать в него значение, так и считать значение из него. Когда управление передаётся в вызывающую среду, содержание формальной переменной присваивается фактическому параметру. Параметр IN OUT это комбинация параметров INи OUT. В данном случае формальный параметр рассматривается в качестве инициализированной переменной.