Oracle PL/SQL中的%TYPE和%ROWTYPE特性
%TYPE 特性
%TYPE 特性可用于声明一个变量,其数据类型和长度与另一个已定义的变量或者数据库表的列相同
- 当表结构改变时,无需手动修改变量的数据类型
语法结构variable_name table_name.column_name%TYPE;
DECLARE
-- 声明一个变量 emp_salary,其数据类型与 employees 表的 salary 列相同
emp_salary employees.salary%TYPE;
BEGIN
-- 查询 employees 表中员工 ID 为 100 的员工的工资
SELECT salary INTO emp_salary FROM employees WHERE employee_id = 100;
UPDATE employees SET salary = emp_salary WHERE employee_id = 101;
COMMIT;
END;
%ROWTYPE 特性
%ROWTYPE 特性可用于声明一个记录类型的变量,该变量能存储表中一行的数据,变量的每个字段与表的列具有相同的数据类型和长度
语法结构variable_name table_name%ROWTYPE;
DECLARE
-- 声明一个记录类型的变量 emp_record,用于存储 employees 表的一行数据
emp_record employees%ROWTYPE;
BEGIN
-- 查询 employees 表中员工 ID 为 100 的员工的所有信息
SELECT * INTO emp_record FROM employees WHERE id = 100;
-- 根据一行记录插入 employees 表
INSERT INTO employees VALUES emp_record;
END;
-- 结合游标使用
DECLARE
CURSOR c_emp IS
SELECT id,first_name,last_name,phone_number,salary FROM employees;
emp c%ROWTYPE;
BEGIN
OPEN c_emp;
LOOP
FETCH c_emp INTO emp;
EXIT WHEN c_emp%NOTFOUND;
-- 更新
UPDATE employees_salary SET name = emp.first_name ||emp.last_name WHERE id = emp.id;
COMMIT;
END LOOP;
CLOSE c_emp;
END;

浙公网安备 33010602011771号