首页 | 编程语言 | 网站建设 | 游戏天堂 | 冲浪宝典 | 网络安全 | 操作系统 | 软件时空 | 硬件指南 | 病毒相关 | IT 认证
软讯网络 > 冲浪宝典 > 网络资源 > Oracle初学者笔记终结篇--集合和成员函数
【标  题】:Oracle初学者笔记终结篇--集合和成员函数
【关键字】:Oracle,--
【来  源】:http://blog.csdn.net/format_jade/archive/2005/11/01/520611.aspx

Oracle初学者笔记终结篇--集合和成员函数

集合

PL/SQL

       PL/SQL块中临时使用,象数组一样的对象,但不会用来定义表中的字段;

       包含一列和一个主键;不能对列和主键进行命名;

       列可以是任何标量数据类型;

       主键必须是binary_integer类型;

       大小没有限制;

定义PL/SQL表的步骤:

1, 定义表的类型;type typename is table of col_def index by binary_integer;

2, 声明该类型的一个PL/SQL表;tablename typename;

引用PL/SQL表:

       使用主键值引用PL/SQL表中的行;

       Tablename(key_value)

PL/SQL表的某行赋值:

       Tablename(key_value):=expression;

 

一个例子:

declare

    type  student_type is table of varchar(10) index by binary_integer;

    stu1 student_type;

begin

     stu1(1):='Tom';

     stu1(2):='fuck';

     for i in 3..10 loop

       stu1(i):='com.'||i;

     end loop;

     for i in 1..10 loop

       dbms_output.put_line('The '||i||' is : '||stu1(i));

     end loop;    

end;

/

PL/SQL表自带了集合函数.delete(i)可以按索引删除第I个元素;

可以不按顺序赋值;

可变数组的宽度是一定的,PL/SQL是无限的,可称为快表;

 

 

记录

为什么使用记录?我们知道%rowtype类型可以使我们获得一个行级变量存放整个行;但是为了获得更大的灵活性,我们希望能够定义一个包括了某几个我们需要的字段的变量而不是整个行的所有字段都被包括的变量;这时候我们用记录;

 

定义类型:type typename is recode(列定义…..);

声明一个该类型的记录变量:recordtype typename;

引用字段:recordname.columnname

赋值:

例子:

declare

       type stuRecordType is record

       (

              id student.stuid%type,

              name student.stuname%type,

              se student.se%type

       );

       stuRec stuRecordType;

begin

       select stuid,stuname,se into stuRec from student

              where stuid='101';

       dbms_output.put_line(sturec.id||' '||sturec.name||' '||sturec.se);

exception

       when no_data_found then

              dbms_output.put_line('no data');

end;

/

一个记录内部可以嵌套其他的记录;

批量绑定:

       PL/SQL变量的赋值;

       一次绑定一个集合

       提高DML的性能;

       Forall关键字用于要在发送到SQL引擎之前对输入集合进行批量绑定;

 

 

 

成员函数和过程

抽象数据类型中定义成员函数和过程;类似Java类中的方法;

构造函数你已经使用过了,它无须显式定义,与对象类型同名;

定义带有函数和过程的对象类型时声明和主体的定义仍然是分开的;

例子:

声明:

create or replace type person_type as object

(

   id  int,

   name varchar(20),

   member function getid return int,

   member procedure setid(pid int),

   member function getname return varchar,

   member procedure setname(pname varchar)

) not final;

主体定义:/

create or replace type body person_type as

  member function getid return int  is

  begin

      return id;

  end getid;

  member procedure setid(pid int) as

  begin

      id:=pid;

  end setid;

  member function getname return varchar is

  begin

      return name;

  end getname;

  member procedure setname(pname varchar) is

  begin

      name:=pname;

  end setname;

end;

/

使用:

  1  declare

  2     p person_type;

  3  begin

  4     p:=person_type(1001,'com');

  5     dbms_output.put_line('id: '||p.getid);

  6     dbms_output.put_line('name: '||p.name);

  7     p.setid(1002);

  8     p.setname('mike');

  9     dbms_output.put_line('id: '||p.getid);

 10     dbms_output.put_line('name: '||p.name);

 11* end;

id: 1001

name: com

id: 1002

name: mike

其实当我们有了p这个变量后就可以直接访问id:  p.id;

我们需要清醒的是这里的类型不是一个表,而是将来可以成为一个表中一个行的类型控制描述;用构造函数构造的只是一个表的一行而不是一个表;当然我们可以用这个类型来定义一个对象表,这样的话,我没什么说的了,因为我已经不明白了;

create table persontable of person_type;

因为对对象表来说我们有两种插入的方法:

insert into persontable values(2001,'fuck');

或构造一个对象插进去:

insert into persontable values(person_type(2002,'me'))

/

SQL SERVER实用技巧:【上一篇】
Oracle初学者笔记(十五)--触发器和内置程序包:【下一篇】
【相关文章】
  • Oracle专家调优秘密(转)
  • PL/SQL学习--前言
  • 动态SQL——EXPERT ONE-ON-ONE ORACLE
  • PL/SQL学习--在PL-SQL块中处理数据
  • Oracle HowTo:如何在Oracle10g中启动和关闭OEM
  • Oracle HowTo:如何快速杀死占用过多资源(CPU,内存)的数据库进程
  • 在oracle中字段类型LONG的使用注意事项
  • Oracle 10g SQL 优化再学习
  • PL/SQL学习--PL/SQL处理
  • PL/Sql循序渐进全面学习教程--Oracle (转载)
  • 【随机文章】
  • 用FLASH做简单MP3播放器
  • 遭遇病毒3721
  • [转载]Windows下常见Oracle服务介绍
  • 用Visual Basic自编小游戏
  • IBM Rational RequisitePro集成简介
  • 收到RHCE教材
  • Java开发WebService实例--计数器(下)
  • Delphi让你发送Flash电子邮件
  • Java SE 6 的2个新特性。
  • Paint.NET v2.6 Release Candidate 2 now available
  • 【相关评论】
    没有相关评论
    【发表评论】
    姓名:
    邮件:
    随机码*
    评论*
          
    |  首 页  |  版权声明  |  联系我们   |  网站地图  |
    CopyRight © 2004-2007 软讯网络 All Rigths Reserved.