您的位置:首页 > 数据库 > Oracle

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

2013-12-25 16:14 302 查看
 一、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;

今天先写到这,接下去继续写游标。存储过程和函数等
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐