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 中引用
单行注释 --
多行注释 /**/
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/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/22193071/viewspace-1346582/