📅  最后修改于: 2023-12-03 15:03:47.149000             🧑  作者: Mango
PL/SQL 过程是一种存储在数据库中的程序单元,能够接受输入参数、执行特定任务并返回输出。它们通常是用于实现业务逻辑和数据操作的自定义功能。
通过 CREATE PROCEDURE
语句可以创建一个过程,下面是一个简单的例子:
CREATE OR REPLACE PROCEDURE get_employee (p_employee_id IN NUMBER, p_employee_name OUT VARCHAR2)
AS
BEGIN
SELECT first_name || ' ' || last_name INTO p_employee_name
FROM employees
WHERE employee_id = p_employee_id;
END;
在这个例子中,get_employee
过程传入一个 employee_id
参数,返回一个由 first_name
和 last_name
组成的字符串。
调用过程时,需要指定所有传入的参数,如下所示:
DECLARE
l_employee_name VARCHAR2(100);
BEGIN
get_employee(100, l_employee_name);
DBMS_OUTPUT.PUT_LINE('Employee name: ' || l_employee_name);
END;
在使用 DECLARE
块声明本地变量,并调用 get_employee
过程,将其赋值给 l_employee_name
。
过程可以接受以下类型的参数:
IN
:输入参数,只能作为输入使用。OUT
:输出参数,返回单一值。IN OUT
:输入/输出参数,即函数同时传递值和收集值。CREATE OR REPLACE PROCEDURE get_employee_info (
p_employee_id IN NUMBER,
p_employee_name OUT VARCHAR2,
p_employee_salary OUT NUMBER
)
AS
BEGIN
SELECT first_name || ' ' || last_name, salary
INTO p_employee_name, p_employee_salary
FROM employees
WHERE employee_id = p_employee_id;
END;
在这个例子中,get_employee_info
过程接受一个 employee_id
参数,并将 first_name
和 last_name
组成的字符串和 salary
返回到 p_employee_name
和 p_employee_salary
参数中。
过程可以使用异常处理程序,处理由代码中的错误触发的异常。异常处理程序使用关键字 EXCEPTION
来定义。
CREATE OR REPLACE PROCEDURE get_employee_name (
p_employee_id IN NUMBER,
p_employee_name OUT VARCHAR2
)
AS
BEGIN
SELECT first_name || ' ' || last_name INTO p_employee_name
FROM employees
WHERE employee_id = p_employee_id;
IF p_employee_name IS NULL THEN
RAISE_APPLICATION_ERROR(-20001, 'Could not find employee');
END IF;
EXCEPTION
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE('Error: ' || SQLERRM);
END;
在这个例子中,如果找不到 employee_id
对应的员工,则通过 RAISE_APPLICATION_ERROR
显示一个自定义错误消息。
PL/SQL 过程将复杂的业务逻辑封装在数据库中,简化了客户端代码,提高了数据库的安全性和性能。使用过程可以将应用程序的负荷从客户端转移到服务器端,从而提高应用程序的性能。