源码-Oracle数据库管理-第十四章-记录与集合-Part 3(使用集合类型)
来源:互联网 发布:Linux中文系统 编辑:程序博客网 时间:2024/06/07 22:37
越到后面实用性越强!所以,学习,贵在坚持!
--14.2 使用集合类型--14.2.1 集合的分类--14.2.2 定义关联数组--代码14.16 在update语句中使用记录类型DECLARE-- 雇佣日期索引表集合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);BEGIN NULL;END;--14.2.3 操作关联数组--代码14.17 定义与使用关联数组DECLARE --定义一个关联数组,元素类型为VARCHAR2(12),下标类型为PLS_INTEGER TYPE idx_table IS TABLE OF VARCHAR2(12) INDEX BY PLS_INTEGER; v_emp idx_table; --定义关联数组变量 v_idx PLS_INTEGER;BEGIN v_emp (1) := '史密斯'; --随机的为索引表赋值 v_emp (20) := '克拉克'; v_emp (40) := '史瑞克'; v_emp (-10) := '杰瑞'; v_idx := v_emp.FIRST; --获取关联数组中第1个元素的下标 WHILE v_idx IS NOT NULL --循环关联数组 LOOP DBMS_OUTPUT.put_line --输出关联数组的值 ('关联数组v_emp下标' || v_idx || ' 所在的值是 ' || v_emp(v_idx)); v_idx := v_emp.NEXT(v_idx); --获取关联数组下一个元素的下标 END LOOP; END;--代码14.18 使用字符串下标的关联数组DECLARE --定义以VARCHAR2作为索引键的关联数组 TYPE idx_empsal_table IS TABLE OF NUMBER(8) INDEX BY VARCHAR2 (20); --声明记录类型的变量 v_empsal idx_empsal_table;BEGIN --为关联数组赋值 v_empsal('史密斯') := 5000; v_empsal('李维二') := 8000; v_empsal('张大千') := 3000; --引用关联数组的内容 DBMS_OUTPUT.put_line ('员工史密斯的工资为:' || v_empsal ('史密斯'));END;--14.2.4 定义嵌套表--代码14.19 嵌套表定义和表变量声明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 ('张小3', '李斯特'); deptno_info deptno_table := deptno_table (); --声明一个空的嵌套表BEGIN NULL;END;--14.2.5 操作嵌套表--代码14.20 使用嵌套表示例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 ('张小3', '李斯特');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 (); --如果未初始化则调用构造函数 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;--初始化嵌套表,传入NULL值。 IF deptno_info IS NULL --判断嵌套表是否被初始化 THEN deptno_info := deptno_table (NULL,NULL,NULL,NULL,NULL); END IF;--代码14.21 使用方案级别的嵌套表--定义一个方案级别的嵌套表类型CREATE OR REPLACE TYPE t_deptno_type IS TABLE OF NUMBER;/--定义一个过程print_deptno,它的形式参数中包含了t_deptno_type的类型CREATE OR REPLACE PROCEDURE print_deptno (nt t_deptno_type) IS i NUMBER;BEGIN i := nt.FIRST; --获取第1个元素的下标,如果不存在则返回NULL IF i IS NULL THEN --如果嵌套表为NULL,则提示用户未分配任何元素 DBMS_OUTPUT.put_line('嵌套表中未分配任何元素'); ELSE WHILE i IS NOT NULL LOOP --循环判断下标值是否为NULL,输出元素值 DBMS_OUTPUT.put('下标.(' || i || ') 的部门编号是: '); DBMS_OUTPUT.put_line(nt(i)); i := nt.NEXT(i); --使用NEXT获取下一个有效的元素的下标 END LOOP; END IF; DBMS_OUTPUT.put_line('---');END print_deptno;/DECLARE nt t_deptno_type := t_deptno_type(); --初始化1个空的嵌套表BEGIN print_deptno(nt); --输出嵌套表信息 nt := t_deptno_type(90, 9, 29, 58); --重新初始化嵌套表,使之具有4个元素 print_deptno(nt); --输出嵌套表信息 nt.DELETE(1); --删除嵌套表中下标为1的元素。 print_deptno(nt); --DBMS_OUTPUT.put_line(nt(1)); --这行代码将产生异常 --nt(1):=10; --用新值替换掉被删除的值是正常的END;/
0 0
- 源码-Oracle数据库管理-第十四章-记录与集合-Part 3(使用集合类型)
- 源码-Oracle数据库管理-第十四章-记录与集合-Part 4(使用集合类型)
- 源码-Oracle数据库管理-第十四章-记录与集合-Part 1(使用PL/SQL记录)
- 源码-Oracle数据库管理-第十四章-记录与集合-Part 2(使用PL/SQL记录)
- 源码-Oracle数据库管理-第九章-SQL查询-Part 4(集合运算和子查询)
- 源码-PL/SQL从入门到精通-第八章-记录与集合-Part 3
- 源码-Oracle数据库管理-第十一章-Oracle内置函数-Part 4(类型转换函数)
- 源码-Oracle数据库管理-第十八章-事务和锁-Part 1(使用Oracle事务)
- 源码-Oracle数据库管理-第十八章-事务和锁-Part 2_1(使用Oracle锁)
- 源码-Oracle数据库管理-第十八章-事务和锁-Part 2_2(使用Oracle锁)
- 源码-Oracle数据库管理-第十二章-使用PL/SQL创建Oracle程序-Part 3(PL/SQL语言概览)
- 源码-PL/SQL从入门到精通-第八章-记录与集合-Part 1
- 源码-PL/SQL从入门到精通-第八章-记录与集合-Part 2
- [Oracle] 第17章 集合-记录类型
- 源码-Oracle数据库管理-第十七章-动态SQL语句-Part 2(使用EXECUTE IMMEDIATE)
- 源码-Oracle数据库管理-第十七章-动态SQL语句-Part 4(使用动态批量绑定)
- 源码-Oracle数据库管理-第十九章-数据库安全性管理-Part 1_1(用户管理)
- 源码-Oracle数据库管理-第七章-视图-Part 3(物化视图)
- python学习
- Go语言 bufio库 使用
- UIGraphicsBeginImageContext
- HooK Dll简单例子
- 0X0000006B导致电脑蓝屏解决
- 源码-Oracle数据库管理-第十四章-记录与集合-Part 3(使用集合类型)
- 理解Cookie和Session机制
- cookie and session
- 数据结构通讯录查询系统
- 事务的四种隔离级别
- UIWebView(Javascript) 原理
- Android UI--自定义ListView(实现下拉刷新+加载更多)
- 卷积神经网络学习笔记
- RTC 2016 实时互联网大会感受