Oracle plsql 基础篇1 数据类型以及流程控制

来源:互联网 发布:傲剑舍利子升级数据 编辑:程序博客网 时间:2024/06/13 06:46

 一、PL/SQL数据类型

数值类型

1、NUMBER  以十进制方式存储,可以表示整数和浮点数,Number最多可达38位(包括小数部分) ,eg : NUMBER(5,2),表示有效位5位,小数点2位, 234.23

2、PLS_INTEGER 和 BINARY_INTEGER  可以认为是同一类型,范围是-2147483648~2147483647  它们的区别是BINARY_INTEGER   发生溢出时能为他指派一个NUMBER类型而不至于发生异常,但PLS_INTEGER 溢出时就会发生异常

3、SIMPLE_INTEGER  oracle11g新增的类型,是PLS_INTEGER 的子类型  取值范围和PLS_INTEGER 一样,该类型允许为空。性能高于PLS_INTEGER ,如果数据本身不需要溢出检查 或者不可能为空 ,则可以选择该类型

字符类型

1、CHAR  用来描述固定长度的字符串,当他的值无法达到定义的长度时,会以空格补齐。最长为32767个字节,默认长度为1,改数据类型比起VARCHAR2比较浪费空间,而且可能需要对数据空格进行处理

2、VARCHAR2 用来描述可变长度字符串,作为变量时候最长32767个字节,作为字段存储时最多4000个字节。当他的值未达到定义的长度时候。不会空格补齐,相对节省空间

3、LONG  以可变的方式存储数据。作为变量最长32760个字节,作为存储字段可达2GB

4、NCHAR、NVARCHAR2类型与CHAR, VARCHAR2相同。与字符集有关

布尔类型

不允许定义表中的数据类型。可以用来存储逻辑值。有3个值可选: TRUE ,  FLASE ,  NULL

日期类型

DATE   存储月、年、日、世纪、时、分、秒

TIMESTAMP  存储月、年、日、世纪、时、分、秒以及小数的秒


复合类型     使用复合类型必须先定义,然后才能声明该类型的变量

1、记录类型

(1)自定义类型

 直接写例子来理解吧

eg:  

DECLARE

 TYPE  readerinfo  IS  RECORD          (TYPE     IS  RECORD关键字   表示记录类型)

(

v_readerid  NUMBER(4),

v_readname   VARCHAR2(20),

   VARCHAR2(50),

) ;

v_readerinfo  readerinfo ;                 

BEGIN

SELECT  READERID, READNAME , UNIT INTO  v_readerinfo  FROM READERINFO WHERE READERID = 9701;

DBMS_OUTPUT.PUT_LINT( ' v_readerid =' || v_readerinfo.v_readerid);

DBMS_OUTPUT.PUT_LINT( ' v_readname=' || v_readerinfo.v_readname);

DBMS_OUTPUT.PUT_LINT( ' v_unit =' || v_readerinfo.v_unit);

END;

 注: 前面表示变量名  后面表示变量类型   即v_readerinfo  为变量名 ,类型为readerinfo 

  可根据变量名.成员名称获取具体的值


(2)利用%ROWTYPE指明数据类型

这种方式直接引用表中的数据类型作为变量的类型,开发过程中用的较多,并且可以避免表中字段类型更改导致的出错

eg:

DECLARE

v_readerinfo  READERINFO%ROWTYPE ;       

BEGIN

SELECT  READERID, READNAME , UNIT INTO  v_readerinfo  FROM READERINFO WHERE READERID = 9701;

DBMS_OUTPUT.PUT_LINT( ' v_readerid =' || v_readerinfo.v_readerid);

DBMS_OUTPUT.PUT_LINT( ' v_readname=' || v_readerinfo.v_readname);

DBMS_OUTPUT.PUT_LINT( ' v_unit =' || v_readerinfo.v_unit);                    

END;


   注:READERINFO是数据库表明。后面直接跟上%ROWTYPE,就表示引用数据库表字段类型作为变量的数据类型

           取值方式和上面相同,根据变量名.成员名称获取值


2、索引表类型

3、VARRAY变长数组类型


二、流程控制

流程控制无非IF ELSE  循环,这里直接写例子来理解

IF ELSE这里不做详写了,下面介绍下plsql里的3种循环

(1)

declare 
  v_rlt number(8) := -3;
  begin
        <<while_loop>> --loop名称 可缺省 ,如果加了 下面end loop后必须加上
        while v_rlt < 3
          loop
            dbms_output.put_line('v_rlt = ' || v_rlt);  
            if v_rlt > 0
              then dbms_output.put_line('v_rlt 大于0 '); 
            end if;
            v_rlt := v_rlt + 1;
          end loop while_loop; 
          dbms_output.put_line('循环结束');
  end;
  

(2)
  declare
        v number(2,1) := 30.23;
        begin
          loop
            v := v + 1;
            dbms_output.put_line('v=' || v);
            exit when v > 5;
          end loop;
        end;


 (3)
    declare
        v_for number(8) := 0; 
        begin
          for v_i in 1..5 loop
               v_for := v_for + v_i;
            dbms_output.put_line('v_for =' || v_for);
            end loop;
        end;


今天先写到这,接下去继续写游标。存储过程和函数等


0 0