`

Oracle索引表、集合 [实例]

 
阅读更多
--索引表的用法
--使用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数据库中的表空间管理和用户管理相关知识点,包括如何创建表空间、设置表空间属性以及如何创建用户并授予相应权限等。 ### 一、Oracle表空间管理 #### 1. 创建表空间 表...

    Java调用oracle函数返回oracle类(类似)集合

    Oracle索引表是一种PL/SQL数据结构,它允许你存储键值对,其中键是整数,值可以是任何PL/SQL数据类型。在本例中,创建了一个名为`sqlindext`的索引表类型,用于存储`varchar2(20)`类型的值,其键是`binary_integer`...

    oracle 查询语句实例

    在这个"oracle查询语句实例"的压缩包中,你将找到一系列实用的查询示例,帮助你深入理解和熟练掌握Oracle SQL的用法。 1. **基础查询** - `SELECT`语句:用于从表中检索数据,基本格式是`SELECT column1, column2 ...

    oracle数据库技术的实例开发

    此外,Oracle的表分区和索引策略能有效提高查询性能,如范围分区、列表分区、哈希分区等。 Oracle对象关系数据库技术则是其独特的一环。这种技术允许数据库不仅存储传统的关系数据,还可以存储自定义的复杂对象和...

    Oracle数据库的实例/表空间/用户/表之间关系简单讲解

    本文将深入讲解Oracle数据库中实例、表空间、用户和表之间的关系。 首先,我们需要理解Oracle数据库的基本结构。一个完整的Oracle数据库由两大部分组成:Oracle数据库本身和数据库实例。数据库是存储在磁盘上的物理...

    Oracle技术文档集合

    手册可能会详细解释如何创建和管理数据库实例、设置安全性、管理表空间以及执行数据库维护任务。 3. **Oracle数据查询.pdf**:此文档专注于Oracle SQL查询语言,包括SELECT语句的使用、联接(JOINs)、子查询、聚合...

    oracle学习参考集合

    Oracle的安装过程包括选择适当的安装类型(如企业版、标准版等)、规划数据库实例、设置系统要求、配置网络服务等。描述中提到的"安装方面"可能包含如何安装Oracle软件、创建数据库、设置监听器、初始化参数文件...

    ORCL数据库相关文档.rar_ORCL数据集合_Oracle命令集合_busy7dm_globewxf_oracle

    总结来说,"ORCL数据库相关文档.rar"提供的Oracle命令集合是一个全面的学习资源,涵盖了数据库实例管理、数据操作、表结构设计、索引与视图、存储过程与触发器、备份恢复以及性能调优等多个核心领域。对于Oracle...

    Oracle 词汇表

    - 模式(Schema):用户的所有对象的集合,如表、视图、索引等。 - 表空间(Tablespace):物理存储数据的逻辑单位,包含数据文件。 - 数据文件(Datafile):实际存储数据的物理文件,属于特定的表空间。 - ...

    oracle_sql集合.rar

    Oracle SQL 是一种强大...这个“oracle_sql集合”可能包含了这些概念的实例和应用,对于初学者和经验丰富的DBA来说都是宝贵的资源。通过学习和实践其中的示例,用户可以深入理解Oracle SQL的精髓,提升数据库管理技能。

    Oracle资料大全(集合)

    2. **Oracle架构**:Oracle数据库由多个组件构成,如实例、数据库、表空间、数据文件、控制文件、重做日志等。理解这些组件的职能及其相互作用,是进行有效数据库设计和管理的关键。 3. **数据库安装与配置**:资料...

    Oracle的逻辑结构、物理结构与实例.docx

    - **定义**:数据库是所有表空间的集合,是Oracle数据库系统的最高级别逻辑结构。 #### 二、Oracle的物理结构 Oracle数据库的物理结构是数据在磁盘上实际的存储方式,主要包括以下组成部分: 1. **数据文件...

    oracle 实例数据库

    这一步骤称为"模式设置",在Oracle中,"模式"通常指的是用户拥有的对象的集合,如表、视图、索引等。运行这个setup文件,新手可以了解到如何初始化和配置数据库结构。 在学习Oracle数据库时,理解表之间的关系也很...

    Oracle数据库系统应用实例集锦与编程技巧

    在Oracle中,数据库设计是至关重要的一步,这涉及到数据模型的选择(如ER模型)、表结构设计、索引策略和约束定义。例如,通过创建合适的主键和外键来保证数据的一致性和完整性,利用分区表提高大数据量查询的效率。...

    Oracle存储过程中使用临时表

    在Oracle数据库中,存储过程是预编译的SQL和PL/SQL代码集合,它们可以用于执行复杂的业务逻辑或数据操作。在某些情况下,特别是在处理大量数据时,使用临时表可以帮助提高性能并简化代码结构。本篇文章将深入探讨...

    《Oracle PL/SQL 实例精解》说明

    在学习PL/SQL时,使用实际的数据模型进行实践是非常有益的,因为它能帮助开发者更好地理解如何创建表、索引、约束,以及如何执行查询、更新和删除操作。 在“源码”标签下,我们可以期待这个压缩包中包含了一些示例...

    oracleHR表结构脚本

    "实例代码所需数据与表结构脚本"可能包含这些脚本的完整集合,用于快速搭建一个模拟的HR数据库环境。使用这些脚本,开发者或DBA可以轻松地在本地或者测试环境中复现Oracle HR数据库,进行开发、测试或教学活动。 ...

Global site tag (gtag.js) - Google Analytics