ITPub博客

首页 > 数据库 > Oracle > oracle_pl_sql 实例精解-第二章 语言基础

oracle_pl_sql 实例精解-第二章 语言基础

原创 Oracle 作者:zuoqi_71 时间:2014-11-25 22:08:35 0 删除 编辑
1、注释
单行注释 --
多行注释 /**/

2、pl/sql 不区分大小写
v_empno 和 V_EMPNO 被视为相同的变量

3、number(p,s) 还挺复杂的,仔细看看吧
number类型的语法很简单:number(p,s):
p:精度位,precision,是总有效数据位数,取值范围是38,默认是38,可以用字符*表示38。
s:小数位,scale,是小数点右边的位数,取值范围是-84~127,默认值取决于p,如果没有指定p,那么s是最大范围,如果指定了p,那么s=0。

number类型的p和s,与其底层存储完全没有关系,根本不会影响数据在磁盘上如何存储,它只会影响允许哪些值以及数值如何舍入,
你可以认为其是对数据的“编辑”。简单的说,精度位p表示数值最多能有多少个有效数字,而小数位s表示最多能有多少位小数。
换句话说,p表示一共有多少位有效数字(即小数点左边最多有p-s位有效数字),s表示小数点右边有s位有效数字。
如number(5,2)类型的数据,就表示小数点左边最多有3位有效数字,右边最多有2位有效数字,加起来就是最多有5位有效数字,
超过这个范围的数字就不能正确的存储下来,注意这里说的是不能正确存储,但并不是不能存储。

最高整数位数=p-s 
s正数,小数点右边指定位置开始四舍五入 
s负数,小数点左边指定位置开始四舍五入 
s是0或者未指定,四舍五入到最近整数 
当p小于s时候,表示数字是绝对值小于1的数字,且从小数点右边开始的前s-p位必须是0,保留s位小数。 

p>0,对s分2种情况: 
1. s>0 
精确到小数点右边s位,并四舍五入。然后检验有效数位是否<=p;如果s>p,小数点右边至少有s-p个0填充。 
2. s<0 
精确到小数点左边s位,并四舍五入。然后检验有效数位是否<=p+|s| 

具体数据可参考下表
Actual Data   Specified As Stored As
----------------------------------------
123.89        NUMBER        123.89
123.89        NUMBER(3)     124
123.89        NUMBER(6,2)   123.89
123.89        NUMBER(6,1)   123.9
123.89        NUMBER(4,2)   exceeds precision (有效位为5, 5 > 4)
123.89        NUMBER(6,-2)  100
.01234        NUMBER(4,5)   .01234 (有效位为4)
.00012        NUMBER(4,5)   .00012
.000127       NUMBER(4,5)   .00013
.0000012      NUMBER(2,7)   .0000012
.00000123     NUMBER(2,7)   .0000012
1.2e-4        NUMBER(2,5)   0.00012
1.2e-5        NUMBER(2,5)   0.00001
123.2564      NUMBER        123.2564
1234.9876     NUMBER(6,2)   1234.99
12345.12345   NUMBER(6,2)   Error (有效位为5+2 > 6)
1234.9876     NUMBER(6)     1235 (s没有表示s=0)
12345.345     NUMBER(5,-2)  12300
1234567       NUMBER(5,-2)  1234600
12345678      NUMBER(5,-2)  Error (有效位为8 > 7)
123456789     NUMBER(5,-4)  123460000
1234567890    NUMBER(5,-4)  Error (有效位为10 > 9)
12345.58      NUMBER(*, 1)  12345.6
0.1           NUMBER(4,5)   Error (0.10000, 有效位为5 > 4)
0.01234567    NUMBER(4,5)   0.01235
0.09999       NUMBER(4,5)   0.09999
0.099999      NUMBER(4,5)   Error (有效位为4位,四舍五入后为0.10000,违反当p小于s时候,
表示数字是绝对值小于1的数字,且从小数点右边开始的前s-p位必须是0)

4、anchored 数据类型
此类型基于某数据库对象,当某基础对象的数据类型发送变化时,无需更改自己的pl/sql代码

  v_empno NUMBER(4);
  v_ename varchar2(10); 
可以修改为
   v_empno SCOTT.emp.empno%type;
   v_ename SCOTT.emp.ename%type; 

declare
   v_empno emp.empno%type;
   v_ename emp.ename%type; 
begin
  select empno,ename
  into  v_empno,v_ename
  from scott.emp
  where empno=7369;
   dbms_output.put_line('---------------------------');
  dbms_output.put_line('empno-name '||v_empno||'-'||v_ename);
  dbms_output.put_line('---------------------------');
 exception
  when no_data_found then
  dbms_output.put_line('---------------------------');  
  dbms_output.put_line('this num is not used by emp');
  dbms_output.put_line('---------------------------');
end;   

5、常见的数据类型
varchar2(max_length)
存储变长字符数据,最大4000字节

number(precision,scale)
p 数字的位数
s 决定是否进行四舍五入

date
日期值,精确到秒

timestamp
date类型的扩展,精度到秒的小数位,最高为小数位的9位,默认是6位
2014-11-25 21.01.000000 

boolean
存储true,false,null

long
存储变长的字符串,最大长度是2GB
可以在select,update,insert中引用long列,但不能在表达式,sql函数,where,group by 中引用

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/22193071/viewspace-1346582/,如需转载,请注明出处,否则将追究法律责任。

下一篇: oracle--lock分析
请登录后发表评论 登录
全部评论

注册时间:2014-02-26

  • 博文量
    48
  • 访问量
    144571