`
lixin_2002
  • 浏览: 21430 次
  • 性别: Icon_minigender_1
  • 来自: 重庆
社区版块
存档分类
最新评论

PL/SQL复习四 复合数据类型

阅读更多

一、PL/SQL记录

1.简单使用:

declare

  type emp_record_type is record(

       v_empno emp.empno%type,

       v_name emp.ename%type,

       v_sal emp.sal%type  

  );

  emp_record emp_record_type;

begin

  select empno, ename, sal into emp_record from emp where empno = &no;

  --或者:select empno, ename into emp_record.v_empno, emp_record.v_name from emp where empno = &no;

    dbms_output.put_line(emp_record.v_name || emp_record.v_sal);

end;

/

2.实用rowtype定义记录类型

declare

  emp_record emp%rowtype;

begin .....

 

 

二、PL/SQL集合:(索引表(PL/SQL表)、嵌套表、变长数组(varray))

1、索引表(PL/SQL表):

   无边界(元素个数没有限制),下标可以为负值

简单使用:

declare

  type ename_table_type is table of emp.ename%type index by binary_integer;

  ename_table ename_table_type;

begin

  select ename into ename_table(-1) from emp where empno = &no;

  dbms_output.put_line('雇员名:'|| ename_table(-1));

end;

/

(index 表示下标数据类型 可以是binary_integer、varchar2、pls_integer)

 

批量提取:

declare

  type ename_table_type is table of emp.ename%type index by binary_integer;

  ename_table ename_table_type;

begin

  select ename bulk collect into ename_table from emp;

  for i in 1..ename_table.count loop   --.count表示元素个数

    dbms_output.put_line(ename_table(i));

  end loop;

end;

/

 

使用varchar2作为下标

declare

  type ename_table_type is table of emp.ename%type index by varchar2(20);

  ename_table ename_table_type;

begin

  ename_table('北京') := 1;

  ename_table('上海') := 2;

  ename_table('广州') := 3;

  dbms_output.put_line('第一个元素: '|| ename_table('北京'));

  dbms_output.put_line('最后一个元素下标: '|| ename_table.last);

end;

/

 

2、嵌套表:

   元素下标从1开始,元素个数没有限制,数组元素值可以是稀疏的

declare

  type ename_table_type is table of emp.ename%type;

  ename_table ename_table_type := ename_table_type('a','b');

begin

  select ename into ename_table(2) from emp where empno = &no;

  dbms_output.put_line('雇员名:'||ename_table(2));

end;

/

 

 

3、变长数组(varray):

   下标从1开始,元素的个数是有限制的

declare

  type ename_table_type is varray(20) of emp.ename%type;

  ename_table ename_table_type := ename_table_type('aa');--必须先初始化

begin

  select ename into ename_table(1) from emp where empno = &no;

  dbms_output.put_line('雇员名:'||ename_table(1));

end;

/

注意:如果初始化时没有分配足够的空间,则在接下来使用时必须先ename_table.extend;或者

ename_table.extend(x)其中x的值不能超过定义时的最大值

创建类型:create type phone_type is varray(20) of varchar2(20);

 

 

4、记录表:(即是索引表和记录的乘积)

declare

  type emp_table_type is table of emp%rowtype index by binary_integer;

  emp_table emp_table_type;

begin

  select * into emp_table(1) from emp where empno = &no;

  dbms_output.put_line('雇员姓名:' ||emp_table(1).ename);

end;

/

 

5、多级集合:

多级索引表:

declare

  --定义一维table

  type a1_table_type is table of int index by binary_integer;

  --二维table

  type a2_table_type is table of a1_table_type index by binary_integer;

  a2_table a2_table_type;

begin

  a2_table(1)(1) := 11;

  a2_table(1)(2) := 12;

  a2_table(1)(3) := 13;

  a2_table(2)(1) := 21;

  a2_table(2)(2) := 22;

  --显示:

  for i in 1..a2_table.count loop

    for j in 1..(a2_table(i).count) loop

      dbms_output.put_line(a2_table(i)(j));

    end loop;

  end loop;

end;

/

其他多级嵌套表、多级变长数组用法是一样的;

 

 

分享到:
评论

相关推荐

    数据库开发技术复习.ppt

    12. **复合数据类型**:了解记录类型和表类型,它们允许存储复杂的数据结构。 13. **命名块**:掌握过程和函数的编写与调用,理解参数传递的方式。包是组织PL/SQL代码的有效方式,包括包头(声明)和包体(实现)。...

    大型数据库技术复习提纲.pdf

    《大型数据库技术》复习提纲主要涵盖了Oracle 11g数据库的多个重要方面,包括数据库的安装配置、体系结构、管理、SQL*Plus命令、SQL语句基础以及PL/SQL编程基础。以下是对这些知识点的详细说明: 1. **Oracle 11g...

    oracle复习

    2. 数据类型:Oracle支持多种数据类型,如CHAR、VARCHAR2、NUMBER、DATE、BLOB等,用于存储不同类型的数据。 3. 表的创建与管理:CREATE TABLE语句用于创建表,ALTER TABLE用于修改表结构,DROP TABLE用于删除表。...

    oracle随堂笔记

    5. **数据类型**:Oracle提供了丰富的数据类型,如CHAR、VARCHAR2、NUMBER、DATE、CLOB、BLOB等,用于存储不同类型的数据。 6. **表的设计**:在设计表时,需考虑字段的主键、外键、索引、约束等,以确保数据的一致...

    整理mysql、oracle数据库相关 笔试面试题,主要为了应对面试过程中遇到的sql题目

    3. **分区表**:Oracle的分区技术能提高大数据量查询的性能,包括范围分区、列表分区、哈希分区和复合分区。 4. **游标**:在PL/SQL中,游标用于遍历查询结果集,是处理单条记录的重要工具。 5. **性能优化**:了解...

    oracle期末复习题及答案.doc

    命名的PL/SQL块类型 - **题目:** 以下哪个不属于命名的PL/SQL块? - A.程序包 - B.过程 - C.游标 - D.函数 - **解析:** 游标(Cursor)不是一个命名的PL/SQL块,它是一种用于处理查询结果集的对象,而不是一个...

    Oracle公司内部数据库培训资料

    - 分区:理解分区技术,包括范围、列表、哈希和复合分区,以及它们在大数据处理中的优势。 - RAC(Real Application Clusters):学习如何配置和管理Oracle集群,提供高可用性和负载均衡。 - 数据库链接:掌握...

    ORACLE 面试题集锦

    - 数据类型:熟悉Oracle中的基本数据类型,如NUMBER、VARCHAR2、DATE、CLOB等。 - 表的创建与删除:掌握CREATE TABLE和DROP TABLE语句的用法。 - 数据约束:理解并能运用NOT NULL、UNIQUE、PRIMARY KEY、FOREIGN ...

    oracle核心总结加两套题目

    触发器是在特定数据库事件发生时自动执行的程序,而存储过程是预编译的SQL和PL/SQL代码集合。两者都用于实现业务逻辑,提高数据一致性。 7. **并发控制**: Oracle使用多版本并发控制(MVCC)和行级锁定来处理...

    Oracle 期末考试 习题

    2. **数据类型**:了解Oracle支持的数据类型,如NUMBER、VARCHAR2、DATE、BOOLEAN等,以及如何适当地使用它们来创建表。 3. **数据库对象**:包括表、视图、索引、存储过程、触发器、游标、序列等。`gongsi数据库`...

    oracle11g ocp051-052-053最新模拟题

    2. 触发器与存储过程:学习如何编写和管理PL/SQL代码,包括触发器、存储过程、游标和异常处理。 3. 数据库安全性:涵盖用户管理、权限和角色的分配,以及如何使用审计功能来确保数据安全。 4. 复制技术:了解...

    Oracle课程目录

    - **通用函数类型**:归纳Oracle中可用于多种数据类型的通用函数,如`NVL`, `DECODE`, `CASE`等。 - **函数特性**:分别阐述这些通用函数的特点及应用场景。 - **综合应用**:结合多个通用函数构建复杂的SQL表达式。...

    华为部分笔试题java和oracle

    1. **基础语法**:包括类、对象、接口、继承、多态等面向对象的基本概念,以及变量、数据类型、运算符、流程控制语句等。 2. **集合框架**:如ArrayList、LinkedList、HashMap、HashSet等容器的使用,以及它们之间...

Global site tag (gtag.js) - Google Analytics