PL/SQL - Процедуры: Путеводитель для начинающих
Здравствуйте, будущие маги PL/SQL! Сегодня мы отправляемся в увлекательное путешествие в мир процедур PL/SQL. Не волнуйтесь, если вы новички в программировании – я буду вашим дружелюбным проводником, и мы будем двигаться шаг за шагом. К концу этого руководства вы сможете создавать свои процедуры, как профессионал!
Что такое процедура PL/SQL?
Прежде чем мы углубимся, давайте поймем, что такое процедура. Представьте procedure как повторно используемый рецепт в кулинарии. Точно так же, как у вас может быть рецепт ваших любимых шоколадных cookies, который вы используете снова и снова, процедура – это набор SQL и PL/SQL операторов, которые вы можете вызывать whenever вам нужно выполнить определенную задачу.
Части подпрограммы PL/SQL
Теперь давайте разберем анатомию подпрограммы PL/SQL (которая включает процедуры). Это как понимание разных частей бутерброда – каждый компонент имеет свою роль!
- Секция объявления: Это место, где мы представляем наши ингредиенты (переменные, константы и т.д.).
- Исполняемая секция: Вот где происходит магия – наш реальный код находится здесь.
- Секция обработки исключений: Это наш страховой полис, который перехватывает любые возможные ошибки.
Вот простое визуальное представление:
DECLARE
-- Секция объявления
BEGIN
-- Исполняемая секция
EXCEPTION
-- Секция обработки исключений
END;
Создание процедуры
Давайте натянем рукава и создадим нашу первую процедуру! Мы начнем с чего-то простого – процедуры, которая говорит "Привет, мир!".
CREATE OR REPLACE PROCEDURE say_hello IS
BEGIN
DBMS_OUTPUT.PUT_LINE('Привет, мир!');
END;
/
Давайте разберем это:
-
CREATE OR REPLACE PROCEDURE
: Это命令 Oracle создать новую процедуру или заменить существующую с таким же именем. -
say_hello
: Это имя, которое мы даем нашей процедуре. -
IS
: Этот ключевой слово отделяет заголовок процедуры от ее тела. -
BEGIN
иEND
: Эти ключевые слова охватывают исполняемую секцию. -
DBMS_OUTPUT.PUT_LINE
: Это встроенная процедура, которая выводит текст. -
/
: Этот слеш выполняет весь оператор CREATE PROCEDURE.
Выполнение самостоятельной процедуры
Отлично! Мы создали нашу процедуру, но как мы ее запустим? Это так же просто, как pie:
BEGIN
say_hello;
END;
/
Когда вы выполните это, вы должны увидеть "Привет, мир!" выведенным. Поздравляю! Вы только что создали и выполнили свою первую процедуру PL/SQL!
Удаление самостоятельной процедуры
Иногда нам нужно навести порядок. Если вы хотите удалить процедуру, это просто:
DROP PROCEDURE say_hello;
Этот命令 удалит нашу процедуру say_hello
. Будьте осторожны с этой властью – с великой властью приходит великая ответственность!
Режимы параметров в подпрограммах PL/SQL
Теперь давайте сделаем наши процедуры более гибкими, добавив параметры. В PL/SQL параметры могут иметь разные режимы:
Режим | Описание |
---|---|
IN | Передача значений в процедуру |
OUT | Возврат значений из процедуры |
IN OUT | Передача значений в и возврат значений из процедуры |
Давайте создадим процедуру с параметром IN:
CREATE OR REPLACE PROCEDURE greet_user(p_name IN VARCHAR2) IS
BEGIN
DBMS_OUTPUT.PUT_LINE('Привет, ' || p_name || '!');
END;
/
Теперь мы можем поприветствовать разных пользователей:
BEGIN
greet_user('Алиса');
greet_user('Боб');
END;
/
Это выведет:
Привет, Алиса!
Привет, Боб!
Методы передачи параметров
При вызове процедур с параметрами у нас есть два основных метода:
- Позиционная запись: Мы передаем параметры в порядке их определения.
- Значимая запись: Мы указываем, какое значение corresponds к каждому параметру.
Давайте посмотрим оба метода в действии с новой процедурой:
CREATE OR REPLACE PROCEDURE calculate_rectangle(
p_length IN NUMBER,
p_width IN NUMBER,
p_area OUT NUMBER,
p_perimeter OUT NUMBER
) IS
BEGIN
p_area := p_length * p_width;
p_perimeter := 2 * (p_length + p_width);
END;
/
Теперь вызовем эту процедуру с использованием обеих записей:
DECLARE
v_area NUMBER;
v_perimeter NUMBER;
BEGIN
-- Позиционная запись
calculate_rectangle(5, 3, v_area, v_perimeter);
DBMS_OUTPUT.PUT_LINE('Позиционная: Площадь = ' || v_area || ', Периметр = ' || v_perimeter);
-- Значимая запись
calculate_rectangle(p_width => 3, p_length => 5, p_perimeter => v_perimeter, p_area => v_area);
DBMS_OUTPUT.PUT_LINE('Значимая: Площадь = ' || v_area || ', Периметр = ' || v_perimeter);
END;
/
Оба вызова дадут такой же результат:
Позиционная: Площадь = 15, Периметр = 16
Значимая: Площадь = 15, Периметр = 16
Значимая запись особенно полезна, когда у вас много параметров или вы хотите пропустить可选ивные.
И вот и все, друзья! Мы рассмотрели основы процедур PL/SQL, от создания до выполнения, и даже touched на параметры и как их передавать. Помните, что практика делает мастера, так что не бойтесь экспериментировать с своими процедурами.
Before we wrap up, here's a quick joke: Why did the database administrator leave his wife? She had too many views and wasn't normalized!
Счастливого кодирования, и пусть ваши процедуры всегда выполняются успешно!
Credits: Image by storyset