PL/SQL - Основы синтаксиса

Добро пожаловать, будущие программисты! Сегодня мы окунаемся в захватывающий мир PL/SQL. Не волнуйтесь, если вы никогда не писали ни строчки кода - мы начнем с азов и шаг за шагом будем строить ваши знания. К концу этого учебника вы будете уверенно писать свои первые программы на PL/SQL!

PL/SQL - Basic Syntax

Пример 'Hello World'

Давайте начнем с традиционной программы "Hello World". Это своего рода ритуал passage для каждого программиста, и это великолепный способ окунуться в синтаксис PL/SQL.

BEGIN
DBMS_OUTPUT.PUT_LINE('Hello, World!');
END;
/

Разберем это:

  1. BEGIN: Этот ключевой слово标记ует начало нашего блока PL/SQL.
  2. DBMS_OUTPUT.PUT_LINE('Hello, World!');: Эта строка выводит наше сообщение. Представьте это как способ PL/SQL говорить с нами.
  3. END;: Это标记ует конец нашего блока PL/SQL.
  4. /: Этотforward slash говорит SQL*Plus execute execute блок PL/SQL.

Когда вы выполните этот код, вы увидите "Hello, World!" на вашем экране. Поздравляю! Вы только что написали свою первую программу на PL/SQL.

Идентификаторы PL/SQL

Идентификаторы - это имена, которые мы даем различным элементам программы, таким как переменные, процедуры и функции. Они как бейджи для разных частей нашего кода. Вот правила для создания идентификаторов:

  1. Должен начинаться с буквы (A-Z или a-z)
  2. Может следовать за буквами, цифрами (0-9), долларами ($), подчеркиваниями (_), или значками фунта (#)
  3. Не может быть длиннее 30 символов
  4. Не может быть зарезервированным словом (например BEGIN, END, IF и т.д.)

Давайте посмотрим на несколько примеров:

DECLARE
employee_name VARCHAR2(50);
salary NUMBER;
dept_id NUMBER(5);
BEGIN
-- Код идет сюда
END;
/

В этом примере employee_name, salary и dept_id являются всемиvalid идентификаторами.

Разделители PL/SQL

Разделители - это особые символы или символы, которые имеют конкретное значение в PL/SQL. Они как знаки препинания в предложении, помогая структурировать и разделять различные части нашего кода.

Вот таблица.common разделителей PL/SQL:

Разделитель Описание
; Терминация оператора
% Индикатор атрибута
. Выбор компонента
( ) Заключение списка параметров
, Разделитель параметров
:= Оператор присваивания
=> Оператор ассоциации
-- Индикатор однострочного комментария
/ / Индикаторы многострочного комментария

Давайте посмотрим, как это работает в действии:

DECLARE
v_count NUMBER := 0; -- Оператор присваивания
v_name VARCHAR2(50) := 'John Doe';
BEGIN
v_count := v_count + 1; -- Терминация оператора
DBMS_OUTPUT.PUT_LINE('Name: ' || v_name); -- Выбор компонента
END;
/

Комментарии PL/SQL

Комментарии - это как липучки в вашем коде. Они игнорируются компилятором, но могут быть incredibly полезны для объяснения того, что делает ваш код. В PL/SQL есть два типа комментариев:

  1. Однострочные комментарии: Начинаются с --
  2. Многострочные комментарии: Заключены между /* и */

Вот пример:

DECLARE
-- Это однострочный комментарий
v_pi NUMBER := 3.14159;
BEGIN
/*
Это многострочный комментарий.
Он может занимать несколько строк.
Очень полезно для более длинных объяснений.
*/
DBMS_OUTPUT.PUT_LINE('Значение pi: ' || v_pi);
END;
/

Блоки программ PL/SQL

Блоки программ PL/SQL являются строительными блоками PL/SQL приложений. Они как рецепты в кулинарной книге - каждый описывает, как выполнить определенную задачу. Основные типы следующие:

  1. Анонимные блоки
  2. Процедуры
  3. Функции
  4. Пакеты

Давайте рассмотрим примеры каждого:

1. Анонимный блок

Мы уже видели это в нашем примере "Hello World". Это блок кода, который не сохраняется в базе данных.

BEGIN
DBMS_OUTPUT.PUT_LINE('Это анонимный блок');
END;
/

2. Процедура

Процедура - это названный блок PL/SQL, который выполняет определенное действие.

CREATE OR REPLACE PROCEDURE greet_user(p_name IN VARCHAR2) IS
BEGIN
DBMS_OUTPUT.PUT_LINE('Hello, ' || p_name || '!');
END;
/

-- Чтобы вызвать процедуру:
BEGIN
greet_user('Alice');
END;
/

3. Функция

Функция похожа на процедуру, но возвращает значение.

CREATE OR REPLACE FUNCTION calculate_area(p_radius IN NUMBER)
RETURN NUMBER IS
v_pi CONSTANT NUMBER := 3.14159;
BEGIN
RETURN v_pi * p_radius * p_radius;
END;
/

-- Чтобы использовать функцию:
DECLARE
v_area NUMBER;
BEGIN
v_area := calculate_area(5);
DBMS_OUTPUT.PUT_LINE('Площадь: ' || v_area);
END;
/

4. Пакет

Пакет - это коллекция связанных процедур, функций, переменных и других PL/SQL объектов.

CREATE OR REPLACE PACKAGE math_operations AS
FUNCTION add_numbers(a IN NUMBER, b IN NUMBER) RETURN NUMBER;
FUNCTION subtract_numbers(a IN NUMBER, b IN NUMBER) RETURN NUMBER;
END math_operations;
/

CREATE OR REPLACE PACKAGE BODY math_operations AS
FUNCTION add_numbers(a IN NUMBER, b IN NUMBER) RETURN NUMBER IS
BEGIN
RETURN a + b;
END add_numbers;

FUNCTION subtract_numbers(a IN NUMBER, b IN NUMBER) RETURN NUMBER IS
BEGIN
RETURN a - b;
END subtract_numbers;
END math_operations;
/

-- Чтобы использовать пакет:
DECLARE
v_result NUMBER;
BEGIN
v_result := math_operations.add_numbers(10, 5);
DBMS_OUTPUT.PUT_LINE('10 + 5 = ' || v_result);

v_result := math_operations.subtract_numbers(10, 5);
DBMS_OUTPUT.PUT_LINE('10 - 5 = ' || v_result);
END;
/

И вот и все! Мы рассмотрели базовый синтаксис PL/SQL, от простых программ "Hello World" до более сложных структур, таких как пакеты. Помните, что обучение программированию похоже на изучение нового языка - это требует практики и терпения. Не бойтесь экспериментировать с примерами кода, модифицировать их и видеть, что произойдет. Так вы действительно интегрируете эти концепции и станете熟练ным программистом PL/SQL.

Счастливого кодирования, и пусть ваши запросы всегда возвращают ожидаемые результаты!

Credits: Image by storyset