PL/SQL--RECORD
2011-12-11 22:11
211 查看
记录是指数据库数据库中的一行数据,是表中单行数据的一个镜像
在PL/SQL中,有三种定义记录类型的方法:
(1)、使用--表名%ROWTYPE;例如:DUAL%ROWTYPE;
(2)、在PL/SQL中声明部分中显式的定义记录类型
(3)、将记录类型定义为数据库结构或者对象类型(OBJECT)
1、使用%ROWTYPE定义记录类型
%ROWTYPE可以引用包括表、视图对象,%ROWTYPE属性继承了这些对象的行定义,
创建测试表
定义一个ROWTYPE变量
显式的将记录定义为PL/SQL的结构
构造复合数据类型,只能使用显式定义的记录类型,不能使用ROWTYPE.基记录类型必须显式的定义
View Code
将记录作为函数返回值的定义和使用方法
在PL/SQL中,有三种定义记录类型的方法:
(1)、使用--表名%ROWTYPE;例如:DUAL%ROWTYPE;
(2)、在PL/SQL中声明部分中显式的定义记录类型
(3)、将记录类型定义为数据库结构或者对象类型(OBJECT)
1、使用%ROWTYPE定义记录类型
%ROWTYPE可以引用包括表、视图对象,%ROWTYPE属性继承了这些对象的行定义,
创建测试表
CREATE TABLE TEST_EMP AS SELECT * FROM EMP E WHERE E.DEPTNO IS NULL CREATE TABLE TEST_DEPT AS SELECT * FROM DEPT E WHERE E.DEPTNO IS NULL
定义一个ROWTYPE变量
DECLARE --定义一个ROWTYPE变量 EMP_RECORD TEST_dept%ROWTYPE; BEGIN --初始化变量中的值 EMP_RECORD.DEPTNO := 50; EMP_RECORD.DNAME := '测试部门'; EMP_RECORD.LOC := '西安绿地'; --插入数据 INSERT INTO TEST_dept VALUES (EMP_RECORD.DEPTNO,EMP_RECORD.DNAME,EMP_RECORD.LOC); --提交记录 COMMIT; END; DECLARE
显式的将记录定义为PL/SQL的结构
DECLARE --定义一个记录 TYPE DEPT_RECORD IS RECORD( DEPTNO TEST_DEPT.DEPTNO%TYPE, DNAME TEST_DEPT.DNAME%TYPE, LOC TEST_DEPT.LOC%TYPE); --定义该记录的一个变量 V_DEPT_RECORD DEPT_RECORD; BEGIN --初始化变量中的值 V_DEPT_RECORD.DEPTNO := 60; V_DEPT_RECORD.DNAME := '测试部门1'; V_DEPT_RECORD.LOC := '西安绿地1'; --插入数据 INSERT INTO TEST_DEPT VALUES (V_DEPT_RECORD.DEPTNO, V_DEPT_RECORD.DNAME, V_DEPT_RECORD.LOC); --提交记录 COMMIT; END;
构造复合数据类型,只能使用显式定义的记录类型,不能使用ROWTYPE.基记录类型必须显式的定义
View Code
DECLARE --定义记录类型 TYPE DEPT_RECORD IS RECORD( DEPTNO NUMBER(2), DNAME VARCHAR2(14), LOC VARCHAR2(13)); TYPE EMP_RECORD IS RECORD( EMPNO NUMBER(4), ENAME VARCHAR2(10), JOB VARCHAR2(9), MGR NUMBER(4), HIREDATE DATE, SAL NUMBER(7, 2), COMM NUMBER(7, 2), DEPTNO NUMBER(2)); --定义复合记录类型 TYPE DEPT_EMP_RECORD IS RECORD( V_DEPT_RECORD DEPT_RECORD, V_EMP_RECORD EMP_RECORD); --定义类型的变量 V_DEPT_EMP_RECORD DEPT_EMP_RECORD; --定义DEPT存储过程 PROCEDURE INSERT_DEPT(I_DEPT_RECORD DEPT_RECORD) IS BEGIN INSERT INTO TEST_DEPT VALUES (I_DEPT_RECORD.DEPTNO, I_DEPT_RECORD.DNAME, I_DEPT_RECORD.LOC); --提交 COMMIT; EXCEPTION WHEN OTHERS THEN DBMS_OUTPUT.PUT_LINE('插入TEST_DEPT表出错,请检查'); ROLLBACK; END INSERT_DEPT; --DEPT存储过程结束 --定义EMP存储过程 PROCEDURE INSERT_EMP(I_EMP_RECORD EMP_RECORD) IS BEGIN INSERT INTO TEST_EMP VALUES (I_EMP_RECORD.EMPNO, I_EMP_RECORD.ENAME, I_EMP_RECORD.JOB, I_EMP_RECORD.MGR, I_EMP_RECORD.HIREDATE, I_EMP_RECORD.SAL, I_EMP_RECORD.COMM, I_EMP_RECORD.DEPTNO); --提交 COMMIT; EXCEPTION WHEN OTHERS THEN DBMS_OUTPUT.PUT_LINE('插入EMP表出错,请检查'); ROLLBACK; END INSERT_EMP; --DEPT存储过程结束 BEGIN --初始化dept数据 V_DEPT_EMP_RECORD.V_DEPT_RECORD.DEPTNO := 60; V_DEPT_EMP_RECORD.V_DEPT_RECORD.DNAME := '测试数据1'; V_DEPT_EMP_RECORD.V_DEPT_RECORD.LOC := '西安市'; --初始话emp数据 V_DEPT_EMP_RECORD.V_EMP_RECORD.EMPNO := 8788; V_DEPT_EMP_RECORD.V_EMP_RECORD.ENAME := '小明'; V_DEPT_EMP_RECORD.V_EMP_RECORD.JOB := '小头目'; V_DEPT_EMP_RECORD.V_EMP_RECORD.MGR := 7899; V_DEPT_EMP_RECORD.V_EMP_RECORD.HIREDATE := SYSDATE; V_DEPT_EMP_RECORD.V_EMP_RECORD.SAL := 6000; V_DEPT_EMP_RECORD.V_EMP_RECORD.COMM := 80; V_DEPT_EMP_RECORD.V_EMP_RECORD.DEPTNO := 60; --调用dept过程 INSERT_DEPT(V_DEPT_EMP_RECORD.V_DEPT_RECORD); INSERT_EMP(V_DEPT_EMP_RECORD.V_EMP_RECORD); EXCEPTION WHEN OTHERS THEN DBMS_OUTPUT.PUT_LINE('程序出错,请检查'); ROLLBACK; END;
将记录作为函数返回值的定义和使用方法
/* 将记录作为函数返回值的定义和使用方法 */ DECLARE --定义一个记录 TYPE EMP_RECORD IS RECORD( DEPTNO NUMBER(2), DNAME VARCHAR2(14), LOC VARCHAR2(13)); --定义记录的变量 V_EMP_RECORD EMP_RECORD; --定义函数 FUNCTION GET_ROW(I_DEPTNO NUMBER) RETURN EMP_RECORD IS --定义一个游标用来返回记录行 CURSOR DEPT_CURSOR(I_DEPTNO_CURSOR NUMBER) IS SELECT * FROM DEPT D WHERE D.DEPTNO = I_DEPTNO_CURSOR; BEGIN --通过循环得到要返回的唯一行 FOR IDX IN DEPT_CURSOR(I_DEPTNO) LOOP --返回行 RETURN IDX; END LOOP; END GET_ROW; BEGIN --得到函数的返回值,打印出来 V_EMP_RECORD := GET_ROW(10); --输出结果 DBMS_OUTPUT.PUT_LINE('DEPTNO:' || V_EMP_RECORD.DEPTNO || ' DNAME:' || V_EMP_RECORD.DNAME || ' LOC:' || V_EMP_RECORD.LOC); END;
相关文章推荐
- PL/SQL 记录(Record)
- Oracle 11g Release 1 (11.1) PL/SQL_理解 Record 类型
- PL/SQL复合数据类型—record,集合(索引表,嵌套表,VARRAY)—之四
- oracle:PL/SQL record记录
- ORACLE PL/SQL 记录(Record)学习笔记(一)
- pl/sql-record
- pl/sql中的record用法
- pl/sql死锁情况:record is locked by another user
- ORACLE PL/SQL 记录(Record)学习笔记(二)
- pl/sql 记录(Record)类型
- oracle pl sql record
- pl/sql table和record类型
- PL/SQL复合类型变量的使用(record、pl/sql表、bulk collect)
- 学习笔记:关于PL/SQL 集合类型record、pl/sql表、varray、nested table
- 《oracle pl/sql programming》 第11章 record
- Pl/SQL 复合类型 RECORD 用法
- Record和PL/SQL详解及操作实战
- ORACE pl/sql记录(RECORD)
- pl/sql Developer 导出表结构和表数据
- Oracle之PL/SQL Developer 如何显示行号、修改字体-yellowcong