(p_City IN varchar2)
RETURN number IS
cnt number;
BEGIN
select count(*) into cnt from sal where cyti= p_City;
RETURN cnt;
END my_func;
/
9.3. Пакеты
Хранимая процедура – это минимальная программная единица в базе данных Oracle. Однако, существует возможность сгруппировать несколько процедур в пакет. Этот пакет можно считать приложением, которое содержит несколько процедур. Для создания пакета используется следующий формат:
CREATE [OR REPLACE] PACKAGE name IS
(определение общедоступных переменных, процедур и функций)
END [name];
CREATE [OR REPLACE] PACKAGE BODY name IS
(определение локальных переменных, процедур и функций)
(реализация процедур и функций)
[BEGIN
(инициализация)]
END [name];
Здесь определения процедур и функций аналогичны тем, которые создаются командой CREATE PROCEDURE. Но поскольку они уже находятся в пакете, в них не нужно включать слова "CREATE OR REPLACE".
Существует еще одна конструкция, встроенная Oracle в определение пакета. Процедуры и функции, включенные в состав пакета, доступны многим пользователям (при наличии привилегий). Вместе с тем, Oracle позволяет определить защищенные (скрытые) компоненты, используемые только процедурам и функциям из общедоступного раздела. Скрытые процедуры размещаются в так называемом теле пакета (package body), как это показано в следующем примере.
CREATE OR REPLACE PACKAGE score_all
AS
PROCEDURE score_answers
(custid IN NUMBER,
term IN NUMBER DEFAULT 30) ;
END;
CREATE OR REPLACE PAKAGE BODY score_all
AS
PROCEDURE letter_grade
…
IS
(объявления переменных)
BEGIN
(операторы SQL и PL/SQL)
END letter_grade;
PROCEDURE score_answers
(custid IN NUMBER,
term IN NUMBER DEFAULT 30)
IS
(определение переменных)
BEGIN
(операторы SQL и PL/SQL)
END;
END;
9.4. Области действия и область видимости переменных
Область действия переменных – это фрагмент программы, в котором возможно обращение к этой переменной. Для переменной PL/SQL – это фрагмент с момента ее объявления и до конца блока. Это показано в следующем примере.
DECLARE -- начало внешнего блока
A number;
BEGIN
DECLARE -- начало внутреннего блока
B number;
BEGIN
END; -- конец внутреннего блока
END; -- конец внешнего блока
Здесь переменная A имеет область действия и во внешнем блоке и во внутреннем. Для переменной B областью действия является только внутренний блок.
Область видимости переменной – это фрагмент программы, в котором возможно обращение к этой переменной без дополнительных квалификаторов. Область видимости всегда лежит в пределах области действия; если переменная находится вне области своего действия, она невидима. Рассмотрим следующий пример.
DECLARE -- начало внешнего блока
A number;
C date;
BEGIN -- 1
DECLARE -- начало внутреннего блока
B number;
C char(2);
BEGIN -- 2
END; -- конец внутреннего блока
-- 3
END; -- конец внешнего блока
В этой программе в точке 1 видимы переменные A и C типа date. В точке 2 видимы переменные A, B и C типа char(2), а переменная C типа date не видна хотя и находится в области своего действия. Дело в том, что объявленная во внутреннем блоке переменная C (т.е. переменная с таким же именем) перекрывает видимость переменной C, определенной во внешнем блоке. В точке 3 видимы переменные A и C типа date, которая снова становится видна, т.к. закончилась область действия переменной C типа char(2).
Если переменная находится в своей области действия, но не видна – то как обратиться к ней в программе? Рассмотрим пример, в котором программа из предыдущего примера несколько изменена.
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.