--索引表的用法
--使用binary_integer
declare
type ename_table_type is table of scott.emp.ename%type
index by binary_integer;
type ehiredate_table_type is table of scott.emp.hiredate%type
index by binary_integer;
ename_table ename_table_type;
ehiredate_table ehiredate_table_type;
begin
select ename,hiredate into ename_table(0),ehiredate_table(0) from scott.emp
where scott.emp.empno=7369;
dbms_output.put_line(ename_table(0));
dbms_output.put_line(to_char(ehiredate_table(0),'yyyy-mm-dd hh24:mi:ss'));
end;
-- 使用 varchar2 索引表时
DECLARE
TYPE area_table_type IS TABLE OF NUMBER INDEX BY varchar(20);
area_index_table area_table_type;
BEGIN
area_index_table('上海') :=1;
area_index_table('北京') :=2;
area_index_table('天津') :=3;
dbms_output.put_line('地点 : '|| area_index_table.first );
dbms_output.put_line('地点 : '|| area_index_table('北京') );
dbms_output.put_line('地点 : '|| area_index_table.last );
END;
-- 使用 嵌套表
-- 索引表的类型不能作为表列的类型,而嵌套表的类型可以作为表列的类型
DECLARE
TYPE ename_table_type IS TABLE OF SCOTT.emp.ename%TYPE;
ename_nest_table ename_table_type;
BEGIN
ename_nest_table :=ename_table_type('dongguoh','hello','third','hello','third'); -- 要使用 嵌套表,必需先初始化,下标从 1 开始
SELECT ename INTO ename_nest_table(2) FROM SCOTT.emp WHERE empno=&no;
dbms_output.put_line('雇员名 : ' || ename_nest_table(2));
END;
-- 在表列中使用 嵌套表作为表中的一个成员,那么必需先创建这个被嵌套表的类型 ,p166
CREATE TYPE phone_type IS TABLE OF VARCHAR2(20);
CREATE TABLE employee (
id NUMBER (4),
name VARCHAR2(10),
sal NUMBER(6,2),
phone phone_type -- 注意这句
) NESTED TABLE phone STORE AS phone_table;
--在 嵌套表中插入数据 如下
BEGIN
INSERT INTO employee VALUES(1,'dongguoh2',1000,phone_type('0471-345678','34567976')); -- 注意这里
END;
--在 嵌套表中 检索 数据 ,先定义变量接收数据 ,如下 P167
DECLARE
phone_table phone_type ;
BEGIN
SELECT phone INTO phone_table FROM employee WHERE id=1;
For i IN 1..phone_table.COUNT LOOP
dbms_output.put_line('电话号码为 : '|| phone_table(i));
END LOOP;
END ;
--更新嵌套表列的数据 ,定义 变量 ,并用构造方法初始化
DECLARE
phone_table phone_type := phone_type('0872-567890','5678906789','5678-567895678','5678957895');
BEGIN
phone_table(1) :='123456789';
phone_table(2) :='987643';
UPDATE employee SET phone=phone_table WHERE id=1;
END ;
-- 使用可变数组 VARRAY
DECLARE
TYPE ename_table_type IS VARRAY(20) OF emp.ename%TYPE;
ename_table ename_table_type :=ename_table_type('dong'); -- 必需初始化
BEGIN
SELECT ename INTO ename_table(1) FROM emp WHERE empno=&no;
dbms_output.put_line('名字为 : ' || ename_table(1)); -- 注意下标不要超出范围
END ;
-- 多维集合的应用 P169
DECLARE
TYPE array1 IS VARRAY(20) OF INT ;
TYPE array2 IS VARRAY(10) OF array1;
towArray array2 :=array2(array1(100,101,102),
array1(201,202),
array1(301,302,303,304));
BEGIN
FOR i IN 1..towArray.COUNT LOOP
FOR j IN 1..towArray(i).COUNT LOOP
DBMS_OUTPUT.PUT_LINE('ARRAY( ' || i || ',' || j || ') = ' || towArray(i)(j)); -- 注意 towArray(i)(j) 的写法
END LOOP;
END LOOP;
END;
SELECT * FROM emp;
-- PL/SQL 记录表
DECLARE
TYPE emp_table_type IS TABLE OF emp%ROWTYPE INDEX BY BINARY_INTEGER;
emp_table emp_table_type;
CURSOR cur_emp_table(v_empno NUMBER) IS SELECT * FROM emp WHERE empno<v_empno;
v_incr INT :=1;
BEGIN
-- 用FOR 语句的时候 隐式
/*
FOR i_cur IN cur_emp_table(&no) LOOP
emp_table(v_incr) :=i_cur;
DBMS_OUTPUT.PUT_LINE('编号 :'|| emp_table(v_incr).empno || ' 名称 :' || emp_table(v_incr).ename);
v_incr:=v_incr+1;
END LOOP;
*/
-- 显示的 LOOP
/*
OPEN cur_emp_table(&no);
LOOP
FETCH cur_emp_table INTO emp_table(v_incr);
v_incr:=v_incr+1;
EXIT WHEN cur_emp_table%NOTFOUND;
END LOOP;
CLOSE cur_emp_table;
*/
OPEN cur_emp_table(&1);
FETCH cur_emp_table INTO emp_table(v_incr);
v_incr:=v_incr+1;
while cur_emp_table%FOUND LOOP
FETCH cur_emp_table INTO emp_table(v_incr);
v_incr:=v_incr+1;
END LOOP;
CLOSE cur_emp_table;
DBMS_OUTPUT.PUT_LINE('emp_table.first:'|| emp_table.first || ' 名称 :' || emp_table.LAST || ' v_incr: ' || v_incr);
FOR i IN emp_table.first..emp_table.LAST LOOP -- 注意这里的范围,当你取出的数据为空的时候会报错
DBMS_OUTPUT.PUT_LINE('编号 :'|| emp_table(i).empno || ' 名称 :' || emp_table(i).ename);
END LOOP;
END ;
分享到:
相关推荐
根据提供的文件信息,本文将详细解析Oracle数据库中的表空间管理和用户管理相关知识点,包括如何创建表空间、设置表空间属性以及如何创建用户并授予相应权限等。 ### 一、Oracle表空间管理 #### 1. 创建表空间 表...
Oracle索引表是一种PL/SQL数据结构,它允许你存储键值对,其中键是整数,值可以是任何PL/SQL数据类型。在本例中,创建了一个名为`sqlindext`的索引表类型,用于存储`varchar2(20)`类型的值,其键是`binary_integer`...
在这个"oracle查询语句实例"的压缩包中,你将找到一系列实用的查询示例,帮助你深入理解和熟练掌握Oracle SQL的用法。 1. **基础查询** - `SELECT`语句:用于从表中检索数据,基本格式是`SELECT column1, column2 ...
此外,Oracle的表分区和索引策略能有效提高查询性能,如范围分区、列表分区、哈希分区等。 Oracle对象关系数据库技术则是其独特的一环。这种技术允许数据库不仅存储传统的关系数据,还可以存储自定义的复杂对象和...
**集合或集合实例** - “集合”可以指代PL/SQL变量,如关联数组、嵌套表或VARRAY类型,也可以指数据库表中的列。 - 集合的核心是一维列表,其中包含同质元素。 **同质元素** - 集合中的所有元素具有相同的数据类型...
本文将深入讲解Oracle数据库中实例、表空间、用户和表之间的关系。 首先,我们需要理解Oracle数据库的基本结构。一个完整的Oracle数据库由两大部分组成:Oracle数据库本身和数据库实例。数据库是存储在磁盘上的物理...
手册可能会详细解释如何创建和管理数据库实例、设置安全性、管理表空间以及执行数据库维护任务。 3. **Oracle数据查询.pdf**:此文档专注于Oracle SQL查询语言,包括SELECT语句的使用、联接(JOINs)、子查询、聚合...
Oracle的安装过程包括选择适当的安装类型(如企业版、标准版等)、规划数据库实例、设置系统要求、配置网络服务等。描述中提到的"安装方面"可能包含如何安装Oracle软件、创建数据库、设置监听器、初始化参数文件...
总结来说,"ORCL数据库相关文档.rar"提供的Oracle命令集合是一个全面的学习资源,涵盖了数据库实例管理、数据操作、表结构设计、索引与视图、存储过程与触发器、备份恢复以及性能调优等多个核心领域。对于Oracle...
- 模式(Schema):用户的所有对象的集合,如表、视图、索引等。 - 表空间(Tablespace):物理存储数据的逻辑单位,包含数据文件。 - 数据文件(Datafile):实际存储数据的物理文件,属于特定的表空间。 - ...
Oracle SQL 是一种强大...这个“oracle_sql集合”可能包含了这些概念的实例和应用,对于初学者和经验丰富的DBA来说都是宝贵的资源。通过学习和实践其中的示例,用户可以深入理解Oracle SQL的精髓,提升数据库管理技能。
2. **Oracle架构**:Oracle数据库由多个组件构成,如实例、数据库、表空间、数据文件、控制文件、重做日志等。理解这些组件的职能及其相互作用,是进行有效数据库设计和管理的关键。 3. **数据库安装与配置**:资料...
- **定义**:数据库是所有表空间的集合,是Oracle数据库系统的最高级别逻辑结构。 #### 二、Oracle的物理结构 Oracle数据库的物理结构是数据在磁盘上实际的存储方式,主要包括以下组成部分: 1. **数据文件...
这一步骤称为"模式设置",在Oracle中,"模式"通常指的是用户拥有的对象的集合,如表、视图、索引等。运行这个setup文件,新手可以了解到如何初始化和配置数据库结构。 在学习Oracle数据库时,理解表之间的关系也很...
在Oracle中,数据库设计是至关重要的一步,这涉及到数据模型的选择(如ER模型)、表结构设计、索引策略和约束定义。例如,通过创建合适的主键和外键来保证数据的一致性和完整性,利用分区表提高大数据量查询的效率。...
在Oracle数据库中,存储过程是预编译的SQL和PL/SQL代码集合,它们可以用于执行复杂的业务逻辑或数据操作。在某些情况下,特别是在处理大量数据时,使用临时表可以帮助提高性能并简化代码结构。本篇文章将深入探讨...
在学习PL/SQL时,使用实际的数据模型进行实践是非常有益的,因为它能帮助开发者更好地理解如何创建表、索引、约束,以及如何执行查询、更新和删除操作。 在“源码”标签下,我们可以期待这个压缩包中包含了一些示例...
"实例代码所需数据与表结构脚本"可能包含这些脚本的完整集合,用于快速搭建一个模拟的HR数据库环境。使用这些脚本,开发者或DBA可以轻松地在本地或者测试环境中复现Oracle HR数据库,进行开发、测试或教学活动。 ...