目录
一、变量
命名规则
命名习惯
二、数据类型
1.标量类型
NUMBER
舍入规则
字符类型
CHAR(n)
VARCHAR2(n)
日期类型
DATE
TIMESTAMP
INTERVAL
布尔类型
2.复合类型
记录类型
表类型
3.引用类型
4.LOB(long object)类型
5.属性类型
一、变量
命名规则
长度最大为30,以字母开头,可以包含字母,数字,#,$,_,但不包括空格以及其他特殊字符。
命名习惯
普通变量名 v_name 游标名c_name 等等。
二、数据类型
1.标量类型
数字类型
NUMBER
存储数字,包括整数,小数,正负数和科学计数表示的数。
最大精度是38位,可以指定精度:NUMBER(n,m)(定义一个总位数不超过n,小数位不超过m的数字)。在这里,n
表示精度(总数字位数),而 m
表示标度(小数点后的数字位数)。
DECLAREv_number NUMBER(4,1):= 10.25;--精度与标度不匹配时,有的数据库会报错,有的会舍五进一;
BEGINIF v_number > 9.0 THEN--执行操作;END IF;
END;
NUMBER(n,m):m为负数时, 他表示小数点位置向左平移|m|个位数,也就是扩大了10倍。(负标度用于表示比整数更大的数值范围,而不是小数。)
DECLAREv_number NUMBER(10,-1) := 10;
BEGINDBMS_OUTPUT。PUT_LINE('number:' || v_number);
END;
输出结果
number:100
舍入规则
●如果有效位是正数,在小数点右边的某处产生四舍五入;
SELECT ROUND(1234.1234,2) FROM DUAL;
使用了ROUND函数,并指定了有效位为2(即保留两位小数)。因此,Oracle会在小数点后两位进行四舍五入,结果是123.46
。
●如果有效位是负数,在小数点左边的某处产生四舍五入;
SELECT ROUND(1234,-2) FROM DUAL;
有效位是-2,表示要对小数点左边第二位进行四舍五入。因此,Oracle会将12345四舍五入到最近的百位数,结果是12300(如果采用标准的四舍五入规则)。这里的-2表示向左移动两位来进行四舍五入。
●如果有效位未指定,四舍五入到最近的整数;(因为如果不指定有效位,ROUND函数通常会默认四舍五入到最接近的整数。)
SELECT 123.4567 FROM DUAL;
由于未指定有效位,ROUND函数会将数字四舍五入到最接近的整数,结果是123
。
●如果有效位是零,四舍五入到最近的整数;
SELECT ROUND(123.4567, 0) FROM DUAL;
有效位是0,表示要四舍五入到最近的整数。因此,Oracle会将123.4567四舍五入到整数,结果是123
(当小数部分小于0.5时)或124
(当小数部分大于或等于0.5时)。在这个具体的数字中,由于小数部分是0.4567,小于0.5,所以结果是123
。
BINARY_INTEGER 和 PLS_INTEGER
存储整数,其中PLS_INTEGER提供了更好的性能。
DECLAREv_int PLS_INTEGER := 1;
BEGINDBMS_OUPUT.PUT_LINE('v_int' || v_int);
END
字符类型
CHAR(n)
固定长度的字符数据。不同于number,不声明长度时就默认定义为一位字符。固定长度,空格右填充。结合RTRIM函数删除变量中的空格。
DECLAREv_char CHAR := '10';
BEGINDBMS_OUTPUT.PUT_LINE('v_char :'|| v_char );v_cahr CHAR(3) := '10';DBMS_OUTPUT.PUT_LINE('v_char :'|| v_char );
END;
输出结果
v_char : 1--未申明,默认保留一位。
v_char : 10 --此处有一个空格
VARCHAR2(n)
varchar是varchar2的子集,完全兼容varchar2,不建议使用varchar,vachar2变长字符变量。
DECLAREv_varchar VARCHAR(10):= '10';
BEGINDBMS_OUTPUT.PUT_LINE('v_varchar :'|| v_varchar );
END;
输出结果
v_varchar :10--此处无空格
日期类型
DATE
存储内容:DATE类型用于存储日期和时间信息,包括年、月、日、时、分、秒。DATE类型可以存储时间信息,其默认显示可能只包括日期部分(年、月、日)。
精度:DATE类型的精度通常到秒级别,不会包含毫秒或微秒信息。
格式:通常,DATE类型在数据库中的存储格式是固定的,但在查询和显示时,可以通过TO_CHAR函数转换为不同的字符串格式。
DECLAREv_date DATE := SYSDATE;
BEGINDBMS_OUTPUT.PUT_LINE('Date: ' || TO_CHAR(v_date, 'YYYY-MM-DD HH24:MI:SS'));
END;
TIMESTAMP
存储内容:TIMESTAMP
类型也用于存储日期和时间信息,与DATE
类型相似,但它提供了更高的精度。
精度:TIMESTAMP
可以精确到秒级别,甚至可以到毫秒、微秒级别,具体精度取决于数据库的设置。在Oracle中,TIMESTAMP
类型可以存储年、月、日、时、分、秒以及小数秒部分。
时区支持:TIMESTAMP
类型还可以存储时区偏移量,允许存储相对于特定时区的日期和时间。
格式与转换:与DATE
类型类似,TIMESTAMP
在数据库中的存储格式是固定的,但可以通过函数进行格式转换以满足不同的显示需求。
INTERVAL
存储内容:INTERVAL
类型用于存储两个时间戳之间的时间间隔。它可以用来表示一段时间的长度,例如几天、几小时或几分钟等。
种类:Oracle支持两种INTERVAL
类型,包括INTERVAL YEAR TO MONTH
(使用年份和月份)和INTERVAL DAY TO SECOND
(使用天数、小时数、分钟数和秒数存储间隔)。这提供了灵活的时间间隔表示方式。
用途:这种数据类型在进行日期和时间计算时非常有用,比如计算两个日期之间的差异,或者对日期进行加减操作等。
布尔类型
存储Boolean值:TRUE、FALSE、NULL。
一个NULL不与其他任何值相等;
一个NULL不与其他任何值不等;
比较操作中存在NULL值,永远不等
比较NULL值, IS NULL, IS NOT NULL
DECLAREv_bloolean BOOLEAN := NULL;
BEGINIF v_boolean = TRUE THENDBMS_OUTPUT.PUT_LINE('Boolean is TRUE');ELSIF v_boolean = FALSE TEHENDBMS_OUTPUT.PUT_LINE('Boolean is FALSE');ELSIF v_boolean is NULL THENDBMS_OUTPUT.PUT_LINE('Boolean is NULL');ELSE DBMS_OUTPUT.PUT_LINE('Boolean is undefined');END IF
END;
输出结果
Boolean is NULL
2.复合类型
记录类型
表类型
3.引用类型
引用类型用于存储对数据库对象的引用。
REF CURSOR:用于存储对游标的引用
4.LOB(long object)类型
5.属性类型
%TYPE:引用表列或已知变量的类型。
%ROWTYPE:引用表的一行。