Хранимая процедура 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(10,0);
Begin
For nbid1 In 1..10000000 Loop
Insert Into ts_insert(nbid,mc) Values(nbid1,nbid1);
End Loop;
Commit;
End;