В этой главе мы обсудим процедуры в PL / SQL. Подпрограмма — это программный модуль / модуль, который выполняет определенную задачу. Эти подпрограммы объединяются в большие программы. Это в основном называется «Модульный дизайн». Подпрограмма может быть вызвана другой подпрограммой или программой, которая называется вызывающей программой .
Подпрограмма может быть создана —
- На уровне схемы
- Внутри упаковки
- Внутри блока PL / SQL
На уровне схемы подпрограмма является отдельной подпрограммой . Он создается с помощью CREATE PROCEDURE или оператора CREATE FUNCTION. Он хранится в базе данных и может быть удален с помощью оператора DROP PROCEDURE или DROP FUNCTION.
Подпрограмма, созданная внутри пакета, является упакованной подпрограммой . Он хранится в базе данных и может быть удален только тогда, когда пакет удаляется с помощью оператора DROP PACKAGE. Мы обсудим пакеты в главе «PL / SQL — Пакеты» .
Подпрограммы PL / SQL называются блоками PL / SQL, которые могут быть вызваны с помощью набора параметров. PL / SQL предоставляет два вида подпрограмм —
-
Функции — эти подпрограммы возвращают одно значение; в основном используется для вычисления и возврата значения.
-
Процедуры — Эти подпрограммы не возвращают значение напрямую; в основном используется для выполнения действий.
Функции — эти подпрограммы возвращают одно значение; в основном используется для вычисления и возврата значения.
Процедуры — Эти подпрограммы не возвращают значение напрямую; в основном используется для выполнения действий.
В этой главе будут рассмотрены важные аспекты процедуры PL / SQL . Мы обсудим функцию PL / SQL в следующей главе.
Части подпрограммы PL / SQL
Каждая подпрограмма PL / SQL имеет имя и может также иметь список параметров. Как и анонимные блоки PL / SQL, именованные блоки также будут иметь следующие три части:
S.No | Части и описание |
---|---|
1 |
Декларативная часть Это необязательная часть. Однако декларативная часть подпрограммы не начинается с ключевого слова DECLARE. Он содержит объявления типов, курсоров, констант, переменных, исключений и вложенных подпрограмм. Эти элементы являются локальными для подпрограммы и перестают существовать, когда подпрограмма завершает выполнение. |
2 |
Исполняемая часть Это обязательная часть и содержит операторы, которые выполняют назначенное действие. |
3 |
Обработка исключений Это опять необязательная часть. Он содержит код, который обрабатывает ошибки во время выполнения. |
Декларативная часть
Это необязательная часть. Однако декларативная часть подпрограммы не начинается с ключевого слова DECLARE. Он содержит объявления типов, курсоров, констант, переменных, исключений и вложенных подпрограмм. Эти элементы являются локальными для подпрограммы и перестают существовать, когда подпрограмма завершает выполнение.
Исполняемая часть
Это обязательная часть и содержит операторы, которые выполняют назначенное действие.
Обработка исключений
Это опять необязательная часть. Он содержит код, который обрабатывает ошибки во время выполнения.
Создание процедуры
Процедура создается с помощью оператора CREATE OR REPLACE PROCEDURE . Упрощенный синтаксис для оператора CREATE OR REPLACE PROCEDURE выглядит следующим образом:
CREATE [OR REPLACE] PROCEDURE procedure_name [(parameter_name [IN | OUT | IN OUT] type [, ...])] {IS | AS} BEGIN < procedure_body > END procedure_name;
Куда,
-
имя-процедуры определяет имя процедуры.
-
Опция [ИЛИ ЗАМЕНА] позволяет модифицировать существующую процедуру.
-
Список необязательных параметров содержит имя, режим и типы параметров. IN представляет значение, которое будет передано извне, а OUT представляет параметр, который будет использоваться для возврата значения вне процедуры.
-
Тело процедуры содержит исполняемую часть.
-
Ключевое слово AS используется вместо ключевого слова IS для создания отдельной процедуры.
имя-процедуры определяет имя процедуры.
Опция [ИЛИ ЗАМЕНА] позволяет модифицировать существующую процедуру.
Список необязательных параметров содержит имя, режим и типы параметров. IN представляет значение, которое будет передано извне, а OUT представляет параметр, который будет использоваться для возврата значения вне процедуры.
Тело процедуры содержит исполняемую часть.
Ключевое слово AS используется вместо ключевого слова IS для создания отдельной процедуры.
пример
В следующем примере создается простая процедура, которая отображает строку «Hello World!» на экране при исполнении.
CREATE OR REPLACE PROCEDURE greetings AS BEGIN dbms_output.put_line('Hello World!'); END; /
Когда приведенный выше код выполняется с использованием подсказки SQL, он даст следующий результат:
Procedure created.
Выполнение отдельной процедуры
Автономная процедура может быть вызвана двумя способами:
-
Использование ключевого слова EXECUTE
-
Вызов имени процедуры из блока PL / SQL
Использование ключевого слова EXECUTE
Вызов имени процедуры из блока PL / SQL
Вышеупомянутая процедура с именем «приветствия» может быть вызвана с ключевым словом EXECUTE как —
EXECUTE greetings;
Вышеуказанный вызов будет отображаться —
Hello World PL/SQL procedure successfully completed.
Процедура также может быть вызвана из другого блока PL / SQL —
BEGIN greetings; END; /
Вышеуказанный вызов будет отображаться —
Hello World PL/SQL procedure successfully completed.
Удаление автономной процедуры
Отдельная процедура удаляется с помощью инструкции DROP PROCEDURE . Синтаксис для удаления процедуры —
DROP PROCEDURE procedure-name;
Вы можете отказаться от процедуры приветствия, используя следующее утверждение —
DROP PROCEDURE greetings;
Режимы параметров в подпрограммах PL / SQL
В следующей таблице перечислены режимы параметров в подпрограммах PL / SQL —
S.No | Параметр Mode & Description |
---|---|
1 |
В Параметр IN позволяет передавать значение в подпрограмму. Это параметр только для чтения . Внутри подпрограммы параметр IN действует как константа. Ему нельзя присвоить значение. Вы можете передать константу, литерал, инициализированную переменную или выражение в качестве параметра IN. Вы также можете инициализировать его значением по умолчанию; тем не менее, в этом случае он исключается из вызова подпрограммы. Это режим передачи параметров по умолчанию. Параметры передаются по ссылке . |
2 |
ИЗ Параметр OUT возвращает значение вызывающей программе. Внутри подпрограммы параметр OUT действует как переменная. Вы можете изменить его значение и ссылаться на значение после его присвоения. Фактический параметр должен быть переменным, и он передается по значению . |
3 |
ВНЕ Параметр IN OUT передает начальное значение подпрограмме и возвращает обновленное значение вызывающей стороне. Ему может быть присвоено значение, и значение может быть прочитано. Фактический параметр, соответствующий формальному параметру IN OUT, должен быть переменной, а не константой или выражением. Формальному параметру должно быть присвоено значение. Фактический параметр передается по значению. |
В
Параметр IN позволяет передавать значение в подпрограмму. Это параметр только для чтения . Внутри подпрограммы параметр IN действует как константа. Ему нельзя присвоить значение. Вы можете передать константу, литерал, инициализированную переменную или выражение в качестве параметра IN. Вы также можете инициализировать его значением по умолчанию; тем не менее, в этом случае он исключается из вызова подпрограммы. Это режим передачи параметров по умолчанию. Параметры передаются по ссылке .
ИЗ
Параметр OUT возвращает значение вызывающей программе. Внутри подпрограммы параметр OUT действует как переменная. Вы можете изменить его значение и ссылаться на значение после его присвоения. Фактический параметр должен быть переменным, и он передается по значению .
ВНЕ
Параметр IN OUT передает начальное значение подпрограмме и возвращает обновленное значение вызывающей стороне. Ему может быть присвоено значение, и значение может быть прочитано.
Фактический параметр, соответствующий формальному параметру IN OUT, должен быть переменной, а не константой или выражением. Формальному параметру должно быть присвоено значение. Фактический параметр передается по значению.
Пример режима IN & OUT 1
Эта программа находит минимум двух значений. Здесь процедура берет два числа, используя режим IN, и возвращает их минимум, используя параметры OUT.
DECLARE a number; b number; c number; PROCEDURE findMin(x IN number, y IN number, z OUT number) IS BEGIN IF x < y THEN z:= x; ELSE z:= y; END IF; END; BEGIN a:= 23; b:= 45; findMin(a, b, c); dbms_output.put_line(' Minimum of (23, 45) : ' || c); END; /
Когда приведенный выше код выполняется в командной строке SQL, он дает следующий результат —
Minimum of (23, 45) : 23 PL/SQL procedure successfully completed.
Пример 2 в режиме IN & OUT
Эта процедура вычисляет квадрат значения переданного значения. В этом примере показано, как мы можем использовать один и тот же параметр, чтобы принять значение и затем вернуть другой результат.
DECLARE a number; PROCEDURE squareNum(x IN OUT number) IS BEGIN x := x * x; END; BEGIN a:= 23; squareNum(a); dbms_output.put_line(' Square of (23): ' || a); END; /
Когда приведенный выше код выполняется в командной строке SQL, он дает следующий результат —
Square of (23): 529 PL/SQL procedure successfully completed.
Методы для передачи параметров
Фактические параметры могут быть переданы тремя способами:
- Позиционная запись
- Именное обозначение
- Смешанная запись
Позиционная запись
В позиционной нотации вы можете вызвать процедуру как —
findMin(a, b, c, d);
В позиционной нотации первый фактический параметр заменяется первым формальным параметром; второй фактический параметр заменяется вторым формальным параметром и так далее. Таким образом, a заменяет x, b заменяет y, c заменяет z и d заменяет m .
Именное обозначение
В именованной записи фактический параметр связан с формальным параметром с помощью символа стрелки (=>) . Вызов процедуры будет выглядеть следующим образом:
findMin(x => a, y => b, z => c, m => d);
Смешанная запись
В смешанной нотации вы можете смешивать обе нотации в вызове процедуры; однако позиционная нотация должна предшествовать именованной нотации.
Следующий вызов является законным —
findMin(a, b, c, m => d);
Однако это не законно: