<<bl_outer>>
DECLARE -- начало внешнего блока
A number;
C date;
BEGIN -- 1
DECLARE -- начало внутреннего блока
B number;
C char(2);
BEGIN -- 2
END; -- конец внутреннего блока
-- 3
END; -- конец внешнего блока
В этой программе внешний блок является помеченным меткой bl_outer. Используя эту метку перед переменной, можно во внутреннем блоке обратиться к переменной C типа date – благодаря использованию метки она становится видна..
9.5. Параметры процедур и функций
Параметры процедур и функций могут быть разного вида, и их разрешается передавать по значению или по ссылке.
Таблица 1. Виды параметров
Вид |
Описание |
IN |
Значение фактического параметра передается в процедуру при ее вызове. Внутри процедуры формальный параметр рассматривается в качестве константы PL/SQL – параметра только для чтения – и не может быть изменен. Когда процедура завершается и управление программой возвращается в вызывающую среду, фактический параметр не изменяется. |
OUT |
Любое значение, которое имеет фактический параметр при вызове процедуры, игнорируется. Внутри процедуры формальный параметр рассматривается как неинициированная переменная PL/SQL, то есть содержит NULL-значение, и можно как записать в него значение, так и считать значение из него. Когда процедура завершается и управление программой возвращается в вызывающую среду, содержимое формального параметра присваивается фактическому параметру (в Oralce 8i этот режим можно изменить с помощью модификатора NOCOPY, позволяющего применять параметр по ссылке). |
IN OUT |
Этот вид представляет комбинацию видов IN и OUT. Значение фактического параметра передается в процедуру при ее вызове. Внутри процедуры формальный параметр рассматривается в качестве инициализированной переменной, и можно как записать в него значение, так и считать значение из него. Когда процедура завершается и управление программой возвращается в вызывающую среду, содержимое формального параметра присваивается фактическому параметру (в Oralce 8i этот режим можно изменить с помощью модификатора NOCOPY, как и для параметра OUT). |
При описании процедур запрещается указывать длину параметров типа CHAR и VARCHAR2, а также точность и/или масштаб параметров типа NUMBER, поскольку ограничения принимаются от фактических параметров. Единственным способом наложить ограничения на формальные параметры является использование атрибута %TYPE. В этом случае ограничение распространяется не на фактический параметр, а на формальный.
CREATE OR REPLACE PROCEDURE myProc
(p_Par1 IN OUT cust.rating%TYPE,
p_Par2 OUT VARCHAR2 DEFALT NULL) IS
BEGIN
p_Par1 := 250;
END myProc;
/
Даже если вызвать процедуру myProc с фактическим параметром другой точности, то будет использоваться точность формального параметра.
Считывание данных из параметра OUT нельзя в Oracle версий, предшествующих Oracle 8i v.8.0.4 (за исключением v 7.3.4).
Если в процедуре или функции нет параметров, то не нужно указывать круглые скобки ни в объявлении подпрограммы, ни в ее вызове.
При вызове подпрограмм с параметрами можно использовать как позиционное представление, так и именное. Позиционное представление используется наиболее часто, и в этом случае параметры перечисляются в том порядке, в каком они описываются в процедуре:
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.