ORACLE复习(一)

来源:互联网 发布:软件测试需要培训吗 编辑:程序博客网 时间:2024/04/29 07:49

很久没有用到Oracle了,前些日子单位接了一个Oracle数据库的项目,自然需要复习一下,现将复习过程中的一些要点记录下来,以备查阅。

一、     表列数据类型

1、字符

1)        VARCHAR2(n)n是必须的,用于存储最长为4000个字符的字符串。但它是可变的,只使用所需要的最少字节。

2)       CHAR(n)n是必须的,用于存储固定长度的字符串。如果所插入的值小于CHAR所声明的长度,则右边以空格填充。一般不用该类型

3)       NCHAR(n), NVARCHAR2(n),仅用于存储Unicode字符集

2、数字

1)       NUMBER, NUMBER(a), NUMBER(a, b)

2)       这种类型用于存储数字,不要使用精确的参数来存储未知范围的值。如Create table temp(amout number),则可以在列amout中存储实际上是任意大小的数字。

3)       参数a代表精度,即占位符的总位数,参数b表示刻度,即小数点右边的位数。如Create table temp(age number(3))表示可以存储任意3位的整数;如果要存储股票价格,其最大值为100万美元(小数点左边有7位),小数点右边有4位,则可以使用Create table temp(price number(11,4))

4)       刻度是可选的,如果没有这个参数,则值将作为整数存储。对于分数,在插入时将被四舍五入为最接近的整数。如果只指定刻度,则可以使用Create table temp(price number(*,4))

3、日期类型

1)       DATE,用于存储日期和时间,默认显示格式为DD-MON-YY

2)       TIMESTAMP派生于DATE,它可以表示与DATE具有相同精度的时间,并包括秒的小数部分

二、     序列

各种数据库以不同的方式来处理列的自动生成,SQL Server使用一个IDENTITY列,而ORACLE则使用序列。序列是一个对象,该对象存储在数据字典中。序列一直保留状态信息,如当前值,而其上下文是在数据字典中维护的。

1、序列的属性:NEXTVAL,求出接下来的最高值;CURRVAL,最近一次调用NEXTVAL时返回的值。

2、创建序列时,序列数字可以是循环的,或者是在某个最大值那里停下来。与之对应的关键字分别是CYCLENOCYCLEINCREMENT BY 间距(interval)可以使序列按照任何整数的倍数来增加,默认是1。为了提高性能,CACHE选项预先在内存中为一些数字分配了缓存。下面创建了一个序列,该序列在05101520这几个值之间循环,到了20后便重新回到0

CREATE SEQUENCE sample_sequence

MINVALUE 0

START WITH 0

MAXVALUE 20

INCREMENT BY 5

NOCACHE

CYCLE;

3、序列数字不会与任何一个表联系在一起,在表与序列之间没有任何的依赖关系。如果删除并重新创建一个序列,或许可以使用这个序列使存储过程暂时无效。而重新创建序列后,存储过程需要重新编译,并且在运行时生效。

4、一旦创建了一个序列,就可以使用它来填充表中的任何一列,故有必要小心地为序列命名,使其能反映它们的用途,同时限定序列的目的是为了填充某一特定的列。

5、用途举例:一个学生编号列STUDENT_ID VARCHAR2(10),假设我们希望该列数据以A开头,后接9位数字。因此我们声明一个9位的序列,从1999999999,然后将前缀字母与这个字符串连接起来。CREATE SEQUENCE语句将会首先使用这些限制来声明MINVALUEMAXVALUE,然后用左补零函数来处理:’A’ || LPAD(student_id.NEXTVALUE, 9, ‘0’)

原创粉丝点击