Oracle PL/SQL 记录类型及示例
什么是记录类型?
记录类型是一种复杂的数据类型,允许程序员创建具有所需列结构的新数据类型。
- 它将一个或多个列组合起来以形成新的数据类型
- 这些列将有自己的名称和数据类型
- 记录类型可以接受数据
- 作为由多列组成的单个记录或
- 它可以接受记录中某一特定列的值
- 记录类型简单地说是一种新的数据类型。一旦创建了记录类型,它将作为新的数据类型存储在数据库中,并且应使用该类型在程序中声明变量。
- 它将使用关键字 '类型' 指示编译器它正在创建新的数据类型。
- 它可以在“数据库级别” 它可以作为数据库对象存储,在整个数据库中使用,也可以在“子程序级别”,仅在子程序内部可见。
- 还可以为表列声明数据库级别的记录类型,以便单个列可以保存复杂的数据。
- 可以通过引用其变量名加上句点运算符 (.) 加上列名来访问这些数据类型中的数据,即' 。 ‘
数据库级别声明的语法:
CREATE TYPE <type_name_db> IS RECORD ( <column 1> <datatype>, );
在第一个语法中,我们可以看到关键字“CREATE TYPE”,它指示编译器使用指定的列创建名为“type_name_db”的记录类型作为数据库对象。
这是作为单独的语句给出的,而不是在任何块内。
子程序级声明的语法:
DECLARE TYPE <type_name> IS RECORD ( <columnl> <datatype>, ); BEGIN <execution_section>; END;
在语法中,我们仅在子程序内部创建名为“type_name”的记录类型。
在两种声明方法中,定义列和数据类型的方式类似。
示例 1:记录类型作为数据库对象
在这个程序中,我们将了解如何创建“记录类型”作为数据库对象。我们将创建具有四列的记录类型“emp_det”。列及其数据类型如下:
- EMP_NO(数字)
- EMP_NAME (VARCHAR2 (150))
- 经理(人数)
- 薪资(数字)
CREATE TYPE emp_det IS OBJECT ( EMP_NO NUMBER, EMP_NAME VARCHAR2(150), MANAGER NUMBER, SALARY NUMBER ); /
输出:
Type created
代码说明:
- 上述代码将创建类型 emp_det 作为数据库对象。
- 它将具有 4 列 emp_no、emp_name、manager 和 salary,正如定义的那样。
- 现在 'emp_det' 与其他类似 数据类型 (如NUMBER、VARCHAR@ 等)并且在整个数据库中可见。因此可以在整个数据库中使用它来声明此类型的变量。
输出:
在数据库级别创建类型“emp_det”作为记录类型。
示例 2:子程序级别的记录类型 - 列级别访问
在这个例子中,我们将看到如何在子程序级别创建一个记录类型以及如何通过列级别填充和获取其中的值。
我们将在子程序级别创建“emp_det”记录类型,并且将使用它来填充和显示其中的数据。
DECLARE TYPE emp_det IS RECORD ( EMP_NO NUMBER, EMP_NAME VARCHAR2(150), MANAGER NUMBER, SALARY NUMBER ); guru99_emp_rec emp_det; BEGIN guru99_emp_rec.emp_no:= 1001; guru99_emp_rec.emp_name:=:'XXX'; guru99_emp_rec.manager:= 1000; guru99_emp_rec.salary:=10000; dbms_output.put.line('Employee Detail'); dbms_output.put_line ('Employee Number: '||guru99_emp_rec.emp_no); dbms_output.put_line ('Employee Name: '||guru99_emp_rec.emp_name); dbms_output.put_line ('Employee Salary: ' ||guru99_emp_rec.salary); dbms_output.put_line ('Employee Manager Number: '||guru99_emp_rec.manager); END; /
输出:
Employee Detail Employee Number: 1001 Employee Name: XXX Employee Salary: 10000 Employee Manager Number: 1000
代码说明:
- 代码行 2-8:记录类型“emp_det”声明为具有数据类型为NUMBER、VARCHAR2、NUMBER、NUMBER 的列 emp_no、emp_name、salary 和 manager。
- 代码第 9 行: guru99_emp_rec 变量被声明为 'emp_det' 数据类型。现在这个 变量 可以保存包含以上所有 4 个字段/列的值。
- 代码第 11 行: 用值 99 填充“guru1001_emp_rec”的“emp_no”字段。
- 代码第 12 行: 用值 XXX 填充“guru99_emp_rec”的“emp_name”字段。
- 代码第 13 行: 用值 99 填充“guru1000_emp_rec”的“经理”字段。
- 代码第 14 行: 将“guru99_emp_rec”的“薪水”字段的值填充为 10000。
- 代码行15-19: 在输出中显示“guru99_emp_rec”的值。
示例 3:子程序级别的记录类型-行级别访问
在此示例中,我们将了解如何在子程序级别创建记录类型以及如何将其填充为行级别。我们将在子程序级别创建“emp_det”记录类型,并使用相同的记录类型来填充和显示其中的数据。
DECLARE TYPE emp_det IS RECORD ( EMP_NO NUMBER, EMP_NAME YARCHAR2( 150), MANAGER NUMBER, SALARY NUMBER ); guru99_emp_rec emp_det; BEGIN INSERT INTO emp (emp_no, emp_name, salary, manager) VALUES (1002,'YYY',15000,1000); COMMIT; SELECT emp_no, emp_name, salary, manager INTO guru99_emp_rec FROM emp WHERE emp_no=1002; dbms_output.put_line (‘Employee Detail’); dbms_output.put_line (‘Employee Number: '||guru99_emp_rec.emp_no); dbms_output.put_line (‘Employee Name: '||guru99_emp_rec.emp_name); dbms_output.put_line (‘Employee Salary: '||guru99_emp_rec. salary); dbms_output.put_line (‘Employee Manager Number: '||guru99_emp_rec.manager); END; /
代码说明:
- 代码行 2-8:记录类型“emp_det”声明为具有数据类型为NUMBER、VARCHAR2、NUMBER、NUMBER 的列 emp_no、emp_name、salary 和 manager。
- 代码第 9 行: guru99_emp_rec 变量被声明为“emp_det”数据类型。现在,此变量可以保存包含上述所有 4 个字段/列的值。
- 代码第 11 行: 使用数据 1002 作为 emp_no、YYY 作为 emp_name、15000 作为薪水和 1000 作为经理编号来填充表 emp。
- 代码第 12 行: 提交上述插入事务。
- 代码第 13 行: 从员工编号 99 的选择查询中填充“guru1002_emp_rec”变量作为行级数据。
- 代码行15-19: 在输出中显示“guru99_emp_rec”的值。
输出:
Employee Detail Employee Number: 1002 Employee Name: YYY Employee Salary: 1000 Employee Manager Number: 15000
请注意: 记录类型只能在列级别访问,同时将其值重定向到任何输出模式。