Oracle серии пятнадцать: хранимые процедуры

1. Основные понятия

(1) Определение

Хранимая процедура Oracle представляет собой набор операторов SQL для определенных функций с входными и выходными параметрами, скомпилированными и сохраненными в базе данных, пользователь указывает имя хранимой процедуры и дает параметры (например, с параметрами) для выполнения.

Использование хранимых процедур имеет следующие преимущества:

  • Улучшенная производительность: поскольку хранимые процедуры выполняются на сервере базы данных, сетевой трафик и время передачи данных могут быть сокращены. Кроме того, поскольку он компилируется один раз и выполняется несколько раз, это также повышает скорость отклика приложения.
  • Защита данных. Управление базой данных с помощью хранимых процедур может предотвратить такие проблемы безопасности, как атаки путем внедрения кода SQL и неправильные операции.
  • Упростите свой код. Инкапсуляция общих задач в один блок кода и присвоение им имен хранимых процедур может упростить повторяющийся код в вашем приложении.
  • Простота обслуживания: если вам нужно изменить какую-то бизнес-логику или условия запроса, вам нужно всего лишь обновить хранимую процедуру.

(2) Разница между хранимыми процедурами и функциями

  • Функции могут возвращать только одно значение, а хранимые процедуры могут возвращать несколько значений.
  • Функции обычно используются как выражения, а хранимые процедуры обычно вызываются для выполнения определенных задач.
  • Функции не могут изменять состояние базы данных, тогда как хранимые процедуры могут.

(3) Разница между хранимыми процедурами и триггерами

  • Триггеры нельзя вызывать явно, в отличие от хранимых процедур.
  • Выполнение триггеров является неявным, тогда как хранимые процедуры являются явными.
  • Триггеры могут быть определены только на уровне таблицы, а хранимые процедуры могут быть определены на уровне базы данных.

2. Создавайте и используйте хранимые процедуры

(1) Создайте хранимую процедуру

CREATE OR REPLACE PROCEDURE my_procedure
AS
BEGIN
-- 执行 SQL 语句或其他任务
END;
  • CREATE OR REPLACEУказывает, что если хранимая процедура уже существует, замените ее новым кодом.
  • ASКлючевое слово указывает тело, с которого начинается определение хранимой процедуры.
  • Хранимые процедуры должны ENDзаканчиваться на .

(2) Вызов хранимой процедуры

Используйте команду EXECUTEили CALLдля вызова хранимой процедуры.

например

EXECUTE my_procedure;

или:

CALL my_procedure();

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

например

EXECUTE my_procedure('John', 'Doe');

(3) Входные параметры хранимой процедуры

Хранимые процедуры Oracle могут получать входные параметры, позволяющие передавать данные в программу во время выполнения. Чтобы объявить входной параметр, используйте IN ключевое слово за которым следует имя параметра и тип данных, имя параметра должно быть четким и понятным, а тип данных должен соответствовать переданному значению.

например

CREATE OR REPLACE PROCEDURE my_procedure (p_name VARCHAR2, p_age NUMBER)
AS
BEGIN
-- 执行 SQL 查询或其他任务
END;

(4) Выходные параметры хранимой процедуры

Хранимые процедуры Oracle также могут возвращать один или несколько результатов, которые называются выходными параметрами. Чтобы объявить выходной параметр, используйте OUTключевое слово, за которым следует имя параметра и тип данных. Выходным параметрам должны быть присвоены значения в теле хранимой процедуры, а вызов хранимой процедуры должен содержать соответствующие переменные для получения выходных значений.

например

CREATE OR REPLACE PROCEDURE my_procedure (p_name VARCHAR2, p_age NUMBER, p_result OUT VARCHAR2)
AS
BEGIN
-- 执行 SQL 查询或其他任务,并将结果存储在 p_result 变量中。
END;

3. Рекомендации по хранимым процедурам

например , вывести имя сотрудника и зарплату на основе идентификатора сотрудника

CREATE OR REPLACE PROCEDURE get_employee_info (p_emp_id IN NUMBER, p_name OUT VARCHAR2, p_salary OUT NUMBER)
AS
BEGIN
  SELECT employee_name, salary INTO p_name, p_salary FROM employees WHERE employee_id = p_emp_id;
EXCEPTION
  WHEN no_data_found THEN
    p_name := 'Unknown';
    p_salary := 0;
END;
/

например , используйте хранимую процедуру для создания 1 миллиона записей:

CREATE OR REPLACE Procedure FILL_TS
As
nbid1 Number(100);
Begin
For nbid1 In 1..10000000 Loop
Insert Into ts_insert(nbid,mc) Values(nbid1,nbid1);
End Loop;
Commit;
End;

Guess you like

Origin blog.csdn.net/apr15/article/details/130976619