PL/SQL学习笔记(3.22)

来源:互联网 发布:redis查询数据库命令 编辑:程序博客网 时间:2024/06/07 08:42

 一、常量和变量


  1 定义常量:
   <常量名> constant <数据类型> := <值>  如:ps_code constant INTEGER := 60;
  2 定义变量:
   <变量名><数据类型>[(宽度):=<初始值>] 如 address VARCHAR2(30)
PL/SQL在变量的定义上存在一个默认的初始化 - null(未定义或未知的取值),默认的被赋值给任何未经过初始化的变量,这是PL/SQL的一个独到之处。


二、数据类型:
 1、 数字类型: NUMBER(整型和浮点型)、  PLS_INTEGER 、BINARY INTEGER (整型)   子类型;
 2、 字符类型:VARCHAR2、CHAR、LONG、 NCHAR、NVARCHAR2;
              VARCHAR2(MaxLength) 最大32767字节,数据库中最大4000字节;
               CHAR(MaxLength) 最大32767字节,数据库中最大2000字节;
              LONG 可变长度 最大32760字节,数据库中最大2G;
 3、 日期类型 DATE 世纪、年、月、日、天、小时、分、秒,7个字节;
 4、 布尔类型 BOOLEAN: TRUE、 FALSE、NULL;
 5、 type定义的数据类型
      格式:type <数据类型名> is <数据类型>
      在Oracle中允许用户定义两种数据类型,它们是RECORD(记录类型)和TABLE(表类型;如:
       type rb_record is RECORD(
           acct_no NUMBER(16) NOT NULL:= 0,
           acct_type CHAR(3),
 );
    定义此类型:single_acct rb_record;
    引用这个记录变量时要指明内部变量,如 single.acct_no、single.acct_type

     PL/SQL还提供了两种特殊的变量 %TYPE和%ROWTYPE,用来声明与表的列相匹配的变量和用户定义数据类型,%TYPE表示单属性的数据     类型,%ROWTYPE表示整个属性列表相匹配,即元组的类型。如:
     type rb_record is RECORD(
        acct_no ACCT.ACCT_NO%TYPE NOT NULL:= 0,
        acct_type ACCT.ACCT_TYPE%TYPE, 
 );
     也可以定义一个与表ACCT的结构类型一致的记录变量,如:rb_record ACCT%ROWTYPE;


三、表达式
    表达式不能独立构成语句,表达式的结果是一个值,如果不给这个值安排一个存放的位置,则表达式本身毫无意义。通常,表达式作为赋值语句的一部分出现在赋值运算符的右边,或者作为函数的参数。
 字符表达式: 并置运算符 || ,连接字符串
 布尔表达式:
 BETWEEN操作符划定一个范围,在范围内则为真,否则为假,如:1 BETWEEN 0 AND 100 为真;
 IN 操作符判断某个元素十分属于某个集合,属于则为真,否则为假,如:'A' IN ('B','C','D')为假;


四 结构控制语句
       GOTO的语法是:GOTO lable;
    这是个无条件转向语句。当执行GOTO语句时,控制程序会立即转到由标签标识的语句。其中,lable是在PL/SQL中定义的标号。标签是用《 》括起来的。例如:
 -- 程序的其他部分
 《goto_mark》   -- 定义了一个转向标签
 -- 程序的其他部分
 if no 〉5 then
 goto goto_mark;   -- 如果条件成立则转向goto_mark继续执行
    在使用GOTO语句时需要务必小心。不必要的GOTO语句会使程序代码复杂化,容易出错,而且难以理解和维护。事实上,几乎所有使用 GOTO的语句都可以使用其他的PL/SQL控制结构(例如循环或者条件结构)来重新进行编写。


五 游标
 为了处理SQL语句,Oracle必须分配一块内存区域,也称为上下文区(context)。上下文区含有完成该处理必须的信息,包括语句所要处理的行的数目,一个指向语句被分析后产生的表示形式的指针,以及查询的活动集(active set),即查询返回的行的集合。
 游标(cursor)是一个指向上下文区的句柄(handle)或指针。通过游标,PL/SQL可以对上下文区进行控制。
 游标分为显式游标和隐式游标两种,显式游标需要用户自己定义,用时要打开,用完要关闭;隐式游标是自动的,不需要用户过问。


 1 显式游标的操作
 (1) 声明游标  CURSOR <游标名> IS SELECT <语句> 语句为将要处理的查询
  声明游标时定义的变量又称为联编变量(bind VARLABLE),即已经被分配空间并映射到绝对地址的变量。
 (2) 为查询打开游标 OPEN <游标名>
  打开游标就是执行定义的SELECT语句。执行完毕,查询结果装入内存,游标停留在查询结果的首部,并不是在第一行。当打开一个游标时,执行顺序如下:
  检查联编变量的取值;
  根据联编变量的取值确定活动集;
  活动集的指针指向第一行;
    在游标打开的时刻并且仅仅在游标打开时对联编变量进行检查。
          打开一个已经打开的游标是合法的,在第二次执行OPEN语句前,PL/SQL将在重新打开该游标前隐式的执行一条CLOSE语句,一次也可以同时打开多个游标。
 (3) 将结果提取到PL/SQL变量中
  FETCH <游标名> INTO <变量列表> 或者 FETCH <游标名> INTO PL/SQL纪录
       其中,游标名是已经被声明并且打开的游标,变量列表是已经被声明的PL/SQL变量列表(变量之间有逗号隔开),PL/SQL是已经被声明的PL/SQL记录。INTO子                  句中的变量的类型都必须是与查询的选择列表的类型相兼容,否则将拒绝执行。FETCH语句每执行一次,游标向后移动一行,直到结束。
  
 (4) 关闭游标
  CLOSE <游标名>
  一旦关闭了游标,也就关闭了SELECT操作,释放了所占用的内存空间,如果再从游标里提取数据或者关闭一个已经关闭的游标就是非法的,会引起Oracle错     误。
 游标的声明必须在块的声明部分进行,其他3个部分在执行部分或者异常处理中进行。


   使用显式游标时的注意事项如下:
  (1) 使用前须用%ISOPEN检查其打开状态,只有此值为TRUE的游标才可使用,否则要先将游标打开。
  (2) 在使用游标的过程中,每次都要用%FOUND或%NOTFOUND属性检查是否返回成功,即是否还有要操作的行。
  (3) 将游标中行取至变量组中时,对应变量个数和数据类型必须完全一致。
  (4) 使用完游标必须将其关闭,以释放相应内存资源。
 用游标也能实现修改和删除操作,但必须在游标定义时指定FOR子句后面的编辑类型,如DELETE或UPDATE。
2 隐式游标的操作
 如果在PL/SQL程序中用SELECT语句进行操作,则隐式地使用了游标,也就是隐式游标,这种游标无需定义,也不需要打开和关闭。
 每个隐式游标必须有一个INTO子句,因此使用隐式游标的SELECT语句必须只选中一行数据或只产生一行数据。
 BEGIN
     SELECT ACCT_NO , ACCT_TYPE INTO acct_num , acctFROM RB_ACCT WHERE ACCT_TYPE = 'DDA' ;
 END;

原创粉丝点击