本文共 3572 字,大约阅读时间需要 11 分钟。
-- Start
PL/SQL 支持 SQL 的数值数据类型,除此之外,它还定义了自己的子类型。有关 SQL 数值数据类型,参见。
DECLARE -- 语法:NUMBER [ (p [, s]) ] -- p(precision) 表示精度,精度是指从左边第一个非0数字开始到右边最后一个非0数字结束的所有数字的个数,p 可以是 1 到 38 的任意数字 -- s(scale) 表示标度,标度是指小数位的个数,s 可以是 -84 到 127 的任意数字 -- 如果一个数字超过了定义的精度,Oracle 会报错 -- 如果一个数字超过了定义的标度,Oracle 会自动四舍五入 TEST1 NUMBER(7,2) := 15.8; -- 你可能已经注意到了,标度怎么可能是负值呢? -- 下面的列存储的是以万为单位的数字,万以下的数字将会被四舍五入,如 15000 --> 20000 TEST2 NUMBER(10,-4) := 15000; -- 你可能也已经注意到了,标度怎么可能大于精度呢?那么请你再次看看精度的定义。 -- 下面的列用来存储诸如 0.01234 等小数点后的第一个数字是0的数字 TEST3 NUMBER(4,5) := 0.01234; -- 下面的列定义了一个整数 TEST4 NUMBER(4) := 100; -- 下面的列同样定义了一个整数 TEST5 NUMBER(4, 0) := 500; -- 如果一个列没有指定精度和标度,表示最大精度和标度 TEST6 NUMBER := 88.88;BEGIN DBMS_OUTPUT.PUT_LINE('TEST1=' || TEST1); DBMS_OUTPUT.PUT_LINE('TEST2=' || TEST2); DBMS_OUTPUT.PUT_LINE('TEST3=' || TEST3); DBMS_OUTPUT.PUT_LINE('TEST4=' || TEST4); DBMS_OUTPUT.PUT_LINE('TEST5=' || TEST5); DBMS_OUTPUT.PUT_LINE('TEST6=' || TEST6);END;/
DECLARE -- INTEGER 是 NUMBER 的子类型:NUMBER(38,0) TEST1 INTEGER := 1; -- INT 是 INTEGER 的子类型 TEST2 INT := 2; -- SMALLINT 是 NUMBER 的子类型:NUMBER(38,0) TEST3 SMALLINT := 3; -- BINARY_INTEGER 是 INTEGER 的子类型,范围从 -2147483647 到 2147483647 TEST4 BINARY_INTEGER := 4; -- PLS_INTEGER 和 BINARY_INTEGER 完全相同 TEST5 PLS_INTEGER := 5; -- SIMPLE_INTEGER 是 BINARY_INTEGER 的子类型,不允许 NULL TEST6 SIMPLE_INTEGER := 6; -- NATURAL 是 BINARY_INTEGER 的子类型,范围从 0 到 2147483647 TEST7 NATURAL := 7; -- NATURALN 是 NATURAL 的子类型,不允许 NULL TEST8 NATURALN := 8; -- POSITIVE 是 BINARY_INTEGER 的子类型,范围从 1 到 2147483647 TEST9 POSITIVE := 9; -- POSITIVEN 是 POSITIVE 的子类型,不允许 NULL TEST10 POSITIVEN := 10; -- SIGNTYPE 是 BINARY_INTEGER 的子类型,范围从 -1 到 1 TEST11 SIGNTYPE := -1; -- DECIMAL 是 NUMBER 的子类型:NUMBER(38,0) TEST12 DECIMAL := 12; -- NUMERIC 是 DECIMAL 的子类型 TEST13 NUMERIC := 13; -- DEC 是 DECIMAL 的子类型 TEST14 DEC := 14; BEGIN DBMS_OUTPUT.PUT_LINE('TEST1=' || TEST1); DBMS_OUTPUT.PUT_LINE('TEST2=' || TEST2); DBMS_OUTPUT.PUT_LINE('TEST3=' || TEST3); DBMS_OUTPUT.PUT_LINE('TEST4=' || TEST4); DBMS_OUTPUT.PUT_LINE('TEST5=' || TEST5); DBMS_OUTPUT.PUT_LINE('TEST6=' || TEST6); DBMS_OUTPUT.PUT_LINE('TEST7=' || TEST7); DBMS_OUTPUT.PUT_LINE('TEST8=' || TEST8); DBMS_OUTPUT.PUT_LINE('TEST9=' || TEST9); DBMS_OUTPUT.PUT_LINE('TEST10=' || TEST10); DBMS_OUTPUT.PUT_LINE('TEST11=' || TEST11); DBMS_OUTPUT.PUT_LINE('TEST12=' || TEST12); DBMS_OUTPUT.PUT_LINE('TEST13=' || TEST13); DBMS_OUTPUT.PUT_LINE('TEST14=' || TEST14);END;/
DECLARE -- FLOAT 是 NUMBER 的一个子类型: NUMBER(126) -- Oracle 不推荐我们使用 FLOAT,推荐使用 BINARY_FLOAT 和 BINARY_DOUBLE TEST1 FLOAT := 1.1; -- REAL 是 FLOAT 的子类型:FLOAT(63 TEST2 REAL := 2.2; -- DOUBLE PRECISION 是 FLOAT 的子类型 TEST3 DOUBLE PRECISION := 3.3;BEGIN DBMS_OUTPUT.PUT_LINE('TEST1=' || TEST1); DBMS_OUTPUT.PUT_LINE('TEST2=' || TEST2); DBMS_OUTPUT.PUT_LINE('TEST3=' || TEST3);END;/
DECLARE -- BINARY_FLOAT 是 NUMBER 的一个子类型 TEST1 BINARY_FLOAT := 1.1; -- SIMPLE_FLOAT 是 BINARY_FLOAT 的子类型 TEST2 SIMPLE_FLOAT := 2.2;BEGIN DBMS_OUTPUT.PUT_LINE('TEST1=' || TEST1); DBMS_OUTPUT.PUT_LINE('TEST2=' || TEST2);END;/
DECLARE -- BINARY_DOUBLE 是 NUMBER 的一个子类型 TEST1 BINARY_DOUBLE := 1.1; -- SIMPLE_DOUBLE 是 BINARY_DOUBLE 的子类型 TEST2 SIMPLE_DOUBLE := 2.2;BEGIN DBMS_OUTPUT.PUT_LINE('TEST1=' || TEST1); DBMS_OUTPUT.PUT_LINE('TEST2=' || TEST2);END;/
--更多参见:
-- 声明:转载请注明出处
-- Last Edited on 2015-01-01
-- Created by ShangBo on 2014-12-21
-- End