源码-PL/SQL从入门到精通-第八章-记录与集合-Part 2
来源:互联网 发布:部落冲突天鹰升级数据 编辑:程序博客网 时间:2024/05/29 15:47
--代码8.8 使用select语句为记录赋值DECLARE TYPE emp_rec IS RECORD( empno NUMBER(10), ename VARCHAR2(30), job VARCHAR2(30)); --声明记录类型的变量 emp_info emp_rec;BEGIN --为记录类型赋值 SELECT empno, ename, job INTO emp_info FROM emp WHERE empno = 7369; --输出记录类型的值 DBMS_OUTPUT.put_line('员工编号:' || emp_info.empno || CHR(13) || '员工姓名:' || emp_info.ename || CHR(13) || '员工职别:' || emp_info.job);END;--代码8.9 在Insert语句中使用记录插入数据DESC dept;INSERT INTO dept SELECT * FROM dept_copy;SELECT *FROM dept_copy;SELECT *FROM dept;DECLARE TYPE dept_rec IS RECORD( deptno NUMBER(2), dname VARCHAR2(14), loc VARCHAR2(13)); --定义2个记录类型的变量 dept_row dept%ROWTYPE; dept_norow dept_rec;BEGIN --为记录类型赋值 dept_row.deptno := 70; dept_row.dname := '工程部'; dept_row.loc := '上海'; dept_norow.deptno := 80; dept_norow.dname := '电脑部'; dept_norow.loc := '北京'; --插入%ROWTYPE定义的记录变量到表中 INSERT INTO dept VALUES dept_row; --插入普通记录变量的值到表中 INSERT INTO dept VALUES dept_norow; --向数据库提交对表的更改 COMMIT;END;SELECT *FROM dept;--代码8.10 在Update语句中使用记录更新数据DECLARE TYPE dept_rec IS RECORD( --定义记录类型 deptno NUMBER(2), dname VARCHAR2(14), loc VARCHAR2(13)); dept_info dept_rec; --定义记录类型的变量BEGIN SELECT * INTO dept_info FROM dept WHERE deptno = 80; --使用SELECT语句初始化记录类型 dept_info.dname := '信管部'; --更新记录类型的值 UPDATE dept SET ROW = dept_info WHERE deptno = dept_info.deptno; --在UPDATE中使用记录变量更新表END;--代码8.11 在DML语句中使用Returning返回受影响的行DECLARE TYPE dept_rec IS RECORD( --定义记录类型 deptno NUMBER(2), dname VARCHAR2(14), loc VARCHAR2(13)); dept_info dept_rec; --定义记录类型的变量 dept_returning dept%ROWTYPE; --定义用于返回结果的记录类型BEGIN SELECT * INTO dept_info FROM dept WHERE deptno = 80; --使用SELECT语句初始化记录类型 dept_info.dname := '信管部'; --更新记录类型的值 UPDATE dept SET ROW = dept_info WHERE deptno = dept_info.deptno --在UPDATE中使用记录变量更新表,返回受影响的行到记录 RETURNING deptno, dname, loc INTO dept_returning; dept_info.deptno := 12; dept_info.dname := '维修部'; INSERT INTO dept --插入新的部门编号记录,返回受影响的行的记录 VALUES dept_info RETURNING deptno, dname, loc INTO dept_returning; DELETE FROM dept --删除现有的部门,返回受影响的行的记录 WHERE deptno = dept_info.deptno RETURNING deptno, dname, loc INTO dept_returning;END;--使用嵌套记录DESC emp;DECLARE TYPE dept_rec IS RECORD( --定义部门记录类型 deptno NUMBER(2), dname VARCHAR2(14), loc VARCHAR2(13)); TYPE emp_rec IS RECORD( --定义员工记录类型 v_empno NUMBER, v_ename VARCHAR2(20), v_job VARCHAR2(9), v_mgr NUMBER(4), v_hiredate DATE, v_sal NUMBER(7, 2), v_comm NUMBER(7, 2), v_dept_rec dept_rec --定义嵌套的员工记录 ); emp_info emp_rec; --员工记录 dept_info dept_rec; --临时部门记录BEGIN SELECT * --从数据库中取出员工部门的记录 INTO dept_info FROM dept WHERE deptno = (SELECT deptno FROM emp WHERE empno = 7369); emp_info.v_dept_rec := dept_info; --将部门信息记录赋给嵌套的部门记录 SELECT empno, ename, job, mgr, --为emp表赋值 hiredate, sal, comm INTO emp_info.v_empno, emp_info.v_ename, emp_info.v_job, emp_info.v_mgr, emp_info.v_hiredate, emp_info.v_sal, emp_info.v_comm FROM emp WHERE empno = 7369; --输出嵌套记录的员工所在部门信息 DBMS_OUTPUT.PUT_LINE('员工所属部门为:' || emp_info.v_dept_rec.dname);END;--8.2.2 定义索引表-- 雇佣日期索引表集合TYPE hiredate_idxt IS TABLE OF DATE INDEX BY PLS_INTEGER;-- 部门编号集合TYPE deptno_idxt IS TABLE OF dept.deptno%TYPE NOT NULL INDEX BY PLS_INTEGER;--记录类型的索引表,这个结构允许在PL/SQL程序中创建本的一个本地副本TYPE emp_idxt IS TABLE OF emp%ROWTYPE INDEX BY NATURAL;-- 由部门名称标识的部门记录的集合TYPE deptname_idxt IS TABLE OF dept%ROWTYPE INDEX BY dept.dname%TYPE;-- 定义集合的集合TYPE private_collection_tt IS TABLE OF deptname_idxt INDEX BY VARCHAR2(100);--代码8.13 定义并操作索引表DECLARE TYPE idx_table IS TABLE OF VARCHAR(12) INDEX BY PLS_INTEGER; --定义索引表类型 v_emp idx_table; --定义索引表变量BEGIN v_emp(1) := '史密斯'; --随机的为索引表赋值 v_emp(20) := '克拉克'; v_emp(40) := '史瑞克'; v_emp(-10) := '杰瑞'; IF v_emp.EXISTS(40) THEN DBMS_OUTPUT.PUT_LINE(v_emp(40)); END IF; -- EXCEPTION -- WHEN OTHERS THEN -- DBMS_OUTPUT.PUT_LINE(SQLERRM);END;--代码8.15 使用%Type类型的索引键DECLARE --定义记录类型的索引表,以dname作为索引键类型 --dname是VARCHAR2(14)类型 TYPE idx_dept_table IS TABLE OF dept%ROWTYPE INDEX BY dept.dname%TYPE; --声明记录类型的变量 v_dept idx_dept_table; --定义一个游标,用来查询dept表 CURSOR dept_cur IS SELECT * FROM dept;BEGIN --使用游标FOR循环打开游标,检索数据 FOR deptrow IN dept_cur LOOP --为索引表中的元素赋值 v_dept(deptrow.dname) := deptrow; --输出部门的LOC列信息 DBMS_OUTPUT.put_line(v_dept(deptrow.dname).loc); END LOOP;END;SELECT *FROM dept;DECLARE --定义以VARCHAR2作为索引键的索引表 TYPE idx_deptno_table IS TABLE OF NUMBER(2) INDEX BY VARCHAR2(20); --声明记录类型的变量 v_deptno idx_deptno_table;BEGIN --为索引表赋值 v_deptno('财务部') := 10; v_deptno('研究部') := 20; v_deptno('销售部') := 30; --引用索引表的内容 DBMS_OUTPUT.put_line('销售部编号为:' || v_deptno('销售部'));END;--代码8.16 嵌套表定义和表变量声明DECLARE TYPE dept_table IS TABLE OF dept%ROWTYPE; --部门信息嵌套表 TYPE emp_name_table IS TABLE OF VARCHAR2(20); --员工名称嵌套表 TYPE deptno_table IS TABLE OF NUMBER(2); --部门编号嵌套表 dept_info dept_table; --声明嵌套表变量 --声明并初始化嵌套表变量 emp_name_info emp_name_table := emp_name_table('张小三', '李斯特'); deptno_info deptno_table := deptno_table(20, 30, 40);BEGIN NULL;END;--代码8.17 嵌套表的初始化与访问DECLARE TYPE emp_name_table IS TABLE OF VARCHAR2(20); --员工名称嵌套表 TYPE deptno_table IS TABLE OF NUMBER(2); --部门编号嵌套表 deptno_info deptno_table; emp_name_info emp_name_table := emp_name_table('张小三', '李斯特');BEGIN DBMS_OUTPUT.put_line('员工1:' || emp_name_info(1)); --访问嵌套表元素 DBMS_OUTPUT.put_line('员工2:' || emp_name_info(2)); IF deptno_info IS NULL --判断嵌套表是否被初始化 THEN deptno_info := deptno_table(NULL, NULL, NULL, NULL, NULL); END IF; -- deptno_info.EXTEND(5); --扩充元素的个数 FOR i IN 1 .. 5 --循环遍历嵌套表元数个数 LOOP deptno_info(i) := i * 10; END LOOP; --显示部门个数 DBMS_OUTPUT.put_line('部门个数:' || deptno_info.COUNT);END;
0 0
- 源码-PL/SQL从入门到精通-第八章-记录与集合-Part 2
- 源码-PL/SQL从入门到精通-第八章-记录与集合-Part 1
- 源码-PL/SQL从入门到精通-第八章-记录与集合-Part 3
- 源码-PL/SQL从入门到精通-第二章-PL/SQL基本概念-Part 2
- 源码-PL/SQL从入门到精通-第十八章-PL/SQL性能优化建议-Part 2
- 源码-PL/SQL从入门到精通-第九章-SQL内置函数-Part 2
- 源码-PL/SQL从入门到精通-第十六章-动态SQL语句-Part 2
- 源码-PL/SQL从入门到精通-第三章-变量和类型-Part 2
- 源码-PL/SQL从入门到精通-第六章-查询数据表-Part 2
- 源码-PL/SQL从入门到精通-第十章-使用游标-Part 2
- 源码-PL/SQL从入门到精通-第十二章-异常处理机制-Part 2
- 源码-PL/SQL从入门到精通-第十三章-子程序-Part 2
- 源码-PL/SQL从入门到精通-第十四章-包-Part 2
- 源码-PL/SQL从入门到精通-第十五章-触发器-Part 2
- 源码-PL/SQL从入门到精通-第十七章-面向对象编程-Part 2
- 源码-PL/SQL从入门到精通-第二章-PL/SQL基本概念-Part 1
- 源码-PL/SQL从入门到精通-第二章-PL/SQL基本概念-Part 3
- 源码-PL/SQL从入门到精通-第十八章-PL/SQL性能优化建议-Part 1
- Sql常见面试题(总结)
- 设置tableView的页眉和页脚
- filter过滤器
- 特征选择常用算法综述
- include 和 require 的理解与区别
- 源码-PL/SQL从入门到精通-第八章-记录与集合-Part 2
- 求素数算法-Java
- jzoj 1416. 【2012.04.14普及组】找数
- java发送http的get、post请求,测试端口是否通
- [玩耍]贪吃蛇
- DM8168学习--内存烧写位置
- Error:Error: Avoid non-default constructors in fragments: use a default construct
- android实用调试技巧
- Spring基于代理的AOP实现