📜  PL SQL-过程(1)

📅  最后修改于: 2023-12-03 15:03:47.149000             🧑  作者: Mango

PL/SQL 过程介绍

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_namelast_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_namelast_name 组成的字符串和 salary 返回到 p_employee_namep_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 过程将复杂的业务逻辑封装在数据库中,简化了客户端代码,提高了数据库的安全性和性能。使用过程可以将应用程序的负荷从客户端转移到服务器端,从而提高应用程序的性能。