
Oracle PL/SQL 中的 DECLARE 语句
在 Oracle 的 PL/SQL(过程化 SQL)编程中,DECLARE 语句用于声明块内的变量、常量、游标、异常处理程序等。PL/SQL 块通常由三个主要部分组成:DECLARE 部分、BEGIN 部分和 EXCEPTION 部分(可选)。
基本结构
DECLARE -- 在这里声明变量、常量、类型、游标和异常处理程序 BEGIN -- 在这里编写执行逻辑 EXCEPTION -- 在这里处理异常 END;DECLARE 部分详解
变量声明
使用 variable_name datatype [:= initial_value]; 语法来声明变量。例如:
DECLARE v_employee_id NUMBER := 101; v_employee_name VARCHAR2(50); BEGIN -- 使用变量 END;常量声明
使用 CONSTANT constant_name datatype := value; 语法来声明常量。例如:
DECLARE CONSTANT c_max_salary NUMBER := 100000; BEGIN -- 使用常量 END;游标声明
游标用于从数据库表中检索多行数据。语法如下:
DECLARE CURSOR cursor_name IS SELECT_statement; BEGIN -- 打开、获取、关闭游标 END;记录类型声明
记录类型允许你将多个字段作为一个单元来处理。语法如下:
DECLARE TYPE employee_record IS RECORD ( emp_id employees.employee_id%TYPE, emp_name employees.first_name || ' ' || employees.last_name%TYPE ); v_employee employee_record; BEGIN -- 使用记录类型变量 END;异常处理程序声明
虽然异常处理程序通常在 EXCEPTION 部分定义,但你也可以在这里声明自定义的异常:
DECLARE my_exception EXCEPTION; BEGIN -- 触发异常 RAISE my_exception; EXCEPTION WHEN my_exception THEN DBMS_OUTPUT.PUT_LINE('My custom exception was raised!'); END;
示例
以下是一个完整的 PL/SQL 块示例,它展示了如何在 DECLARE 部分声明变量、游标和异常处理程序,并在 BEGIN 和 EXCEPTION 部分中使用它们:
DECLARE v_department_id NUMBER := 10; CURSOR c_employees IS SELECT employee_id, first_name, last_name FROM employees WHERE department_id = v_department_id; v_employee_record c_employees%ROWTYPE; my_no_data_found EXCEPTION; BEGIN OPEN c_employees; LOOP FETCH c_employees INTO v_employee_record; EXIT WHEN c_employees%NOTFOUND; DBMS_OUTPUT.PUT_LINE('Employee ID: ' || v_employee_record.employee_id || ', Name: ' || v_employee_record.first_name || ' ' || v_employee_record.last_name); END LOOP; CLOSE c_employees; -- 模拟未找到数据的异常 IF NOT c_employees%FOUND THEN RAISE my_no_data_found; END IF; EXCEPTION WHEN my_no_data_found THEN DBMS_OUTPUT.PUT_LINE('No data found for the specified department.'); WHEN OTHERS THEN DBMS_OUTPUT.PUT_LINE('An error occurred: ' || SQLERRM); END;在这个示例中,我们声明了一个部门 ID 变量、一个游标来获取指定部门的员工信息,以及一个自定义异常 my_no_data_found。然后在 BEGIN 部分打开游标并遍历结果集,如果未找到任何数据则触发自定义异常。在 EXCEPTION 部分捕获并处理该异常以及其他可能的错误。
