数据类型:

数字类型:
Number用来表示可变长的数值列,语法为Number(p, s),p是指所有有效数字的位数,s是指小数点以后的位数;p和s的取值分别是p=1 to 38,s=-84 to 127;
有效数位:从左边第一个不为0的数算起,小数点和负号不计入有效位数。

p>0,对s分3种情况:
1. s>0
精确到小数点右边s位,并四舍五入。然后检验有效数位是否<=p;如果s>p,小数点右边至少有s-p个0填充。
2. s<0
精确到小数点左边s位,并四舍五入。然后检验有效数位是否<=p+|s|
3.s是0或者未指定,四舍五入到最近整数。
注意:当p小于s时候,表示数字是绝对值小于1的数字,且从小数点右边开始的前s-p 位必须是0,保留s位小数。

比如
Value             Datatype     Stored Value
123.2564       NUMBER    123.2564
1234.9876     NUMBER(6)    1235
1234.9876     NUMBER(6,2)    1234.99
12345.12345 NUMBER(6,2)    Error
12345.345     NUMBER(5,-2)    12300
1234567        NUMBER(5,-2)    1234600
12345678      NUMBER(5,-2)    Error
12345.58      NUMBER(*, 1)    12345.6
0.1               NUMBER(4,5)    Error
0.01234567   NUMBER(4,5)    0.01235
0.09999        NUMBER(4,5)    0.09999
0.099996      NUMBER(4,5)    <> 
 

用法如下:
create table t_n(id number(5,2));

insert into t_n values(123.455);
insert into t_n values(1.234);
insert into t_n values(.001);

select * from t_n 结果为:

ID
123.46
1.23
0.00

Number类型存储实数,PLS_Integer和BINARY_Integer只能存储整数。

字符类型:

Char表示定长的字符串,语法Char(L),L是可选的。如果没有指定L值,默认为1;最大长度为32767。

VarChar2用来存储可变的字符串,语法VarChar2(L),L是必须的。最大长度为32767。

布尔类型:

Boolean类型的合法赋值为True、False和Null。

类型转换:

To_Char:可以将Number和Date类型转换为Varchar2类型;

To_Date:将Char类型转换Date类型;

To_Number:将Char类型转换Number类型;

变量和常量:

变量名称:1.必须以字母开头;2.其后可以跟一个或多个字母、数字(0~9)、特殊字符$、#或_ ;

              3.变量长度不超过30个字符;4.变量名中不能有空格。

1.变量的声明:

DECLARE
v_StudentName VARCHAR2(20),
v_CurrentDate DATE;
v_NumberCredits NUMBER(3);

2.自定义的数据类型:

DECLARE
TYPE t_StudentRecord IS RECORD (FirstName Varchar2(10),LastName Varchar2(10),

CurrentCredits NUMBER(3));
v_Student  t_StudentRecord;

3.变量属性:

下面介绍常见的几种复合数据类型变量的定义。
    (1)使用%type定义变量
    为了让PL/SQL中变量的类型和数据表中的字段的数据类型一致,Oracle 9i提供了%type定义方法。这
样当数据表的字段类型修改后,PL/SQL程序中相应变量的类型也自动修改。如下:
declare
   mytable emp.empno%type;
begin
   select a.empno into mytable
   from emp a
   where a.ename='SCOTT';
   dbms_output.put_line(mytable);
end;
   

   (2)使用%rowtype定义变量
   
使用%type可以使变量获得字段的数据类型,使用%rowtype可以使变量获得整个记录的数据类型。

    比较两者定义的不同:变量名 数据表.列名%type,变量名 数据表%rowtype。
declare
   mytable emp%rowtype;
begin
   select * into mytable
   from emp a
   where a.ename='SCOTT';
   dbms_output.put_line(mytable.empno||' '||mytable.job);
end;
 

流程控制:

 

 待续。。。

posted on 2009-02-03 11:33  断点  阅读(458)  评论(0编辑  收藏  举报