Конспект лекций по дисциплине «Сетевые базы данных», страница 29

<<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).

Если в процедуре или функции нет параметров, то не нужно указывать круглые скобки ни в объявлении подпрограммы, ни в ее вызове.

При вызове подпрограмм с параметрами можно использовать как позиционное представление, так и именное. Позиционное представление используется наиболее часто, и в этом случае параметры перечисляются в том порядке, в каком они описываются в процедуре: