Oracle中的数据类型
Posted 咕咚
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Oracle中的数据类型相关的知识,希望对你有一定的参考价值。
Oracle中的数据类型
/* ORACLE 中的数据类型; char 长度固定 范围:1-2000 VARCHAR2 长度可变 范围:1-4000 LONG 长度可变 最大的范围2gb 长字符类型 number 数字 number(p,s) Date 日期类型,精确到秒 TIMESTAMP 存储日期,时间,时区,妙值,精确到小数 CLOB 字符数据 BLOB 存放二进制数据,视频图片等 BFILE :用于将二进制数据存储在数据库外部的操作系统文件中 所谓固定长度: 所谓固定长度:是指虽然输入的字段值小于该字段的限制长度, 但是实际存储数据时,会先自动向右补足空格后, 才将字段值的内容存储到数据块中。 这种方式虽然比较浪费空间, 但是存储效率较可变长度类型要好。同时还能减少数据行迁移情况发生。 所谓可变长度:是指当输入的字段值小于该字段的限制长度时, 直接将字段值的内容存储到数据块中, 而不会补上空白,这样可以节省数据块空间。 */ --储字节或字符? CREATE TABLE T1( NAME CHAR(4) --默认的是字节 ); INSERT INTO T1 VALUES(‘AB‘); INSERT INTO T1 VALUES(‘ABCD‘); INSERT INTO T1 VALUES(‘我爱中国‘); --这个就会报错 INSERT INTO T1 VALUES(‘我爱‘); --这样就是正确滴呀 SELECT * FROM T1; SELECT LENGTH(ltrim(rtrim(NAME))) FROM T1 WHERE NAME=‘AB‘ --2 SELECT LENGTH(NAME) FROM T1 WHERE NAME=‘AB‘ --4 SELECT NAME FROM T1 WHERE NAME=N‘AB‘; --没有值滴呀; SELECT NAME FROM T1 WHERE NAME=‘AB‘; --同样的比较; CREATE TABLE T2( NAME CHAR(4 CHAR) --默认的是字节 ); INSERT INTO T2 VALUES(‘ABCD‘); INSERT INTO T2 VALUES(‘ABCDABCD‘); --报错 INSERT INTO T2 VALUES(‘我爱中国‘); ----正常插入 SELECT * FROM T2; --一个汉字占几个字符,具体的还要看 编码方式 /* 数据库的NLS_CHARACTERSET 为AL32UTF8,即一个汉字占用三到四个字节。如果NLS_CHARACTERSET为ZHS16GBK,则一个字符占用两个字节。 */ --NCHAR --注意N 开头的都是unicode 字符类型的数据滴呀 /* 这是一个包含UNICODE格式数据的定长字符串。NCHAR字段最多可以存储2,000字节的信息。它的最大长度取决于国家字符集。另外查询时,如果字段是NCHAR类型,则需要如下书写 SELECT translated_description FROM product_descriptions WHERE translated_name = N‘LCD Monitor 11/PM‘; */ CREATE TABLE N1( NAME NCHAR(4) --默认的是字节 ); INSERT INTO N1 VALUES(‘AB‘); INSERT INTO N1 VALUES(‘ABCD‘); INSERT INTO N1 VALUES(‘我爱中国‘); --插入成功 INSERT INTO N1 VALUES(‘我爱‘); --插入成功 SELECT * FROM N1; /* N 在这里表示 Unicode,就是双字节字符。对于西文字符,用一个字节来存储过足够了,对于东方文字字符, 就需要两个字节来存储。 Unicode 为了统一、规范、方便、兼容,就规定西文字符也用两个字节来存储。 */ -- N 不能乱加滴呀 SELECT * FROM N1 WHERE NAME =N‘我爱 ‘; --这样查询的话,你必须加上两个空格;才能查到值滴呀; SELECT * FROM N1 WHERE NAME =‘我爱‘; SELECT * FROM N1 WHERE NAME =‘AB‘; SELECT * FROM N1 WHERE NAME =N‘AB ‘; SELECT LENGTH(‘AB‘) FROM DUAL; --2 SELECT LENGTH(‘AB ‘) FROM DUAL; --4 SELECT LENGTH(NAME) FROM N1 WHERE NAME =‘AB‘; --长度为4 /* 不要使用VARCHAR数据类型。使用VARCHAR2数据类型。虽然VARCHAR数据类型目前是VARCHAR2的同义词, VARCHAR数据类型将计划被重新定义为一个单独的数据类型用于可变长度的字符串相比,具有不同的比较语义。 1.4: VARCHAR2类型 变长字符串,与CHAR类型不同,它不会使用空格填充至最大长度。VARCHAR2最多可以存储4,000字节的信息。 1.5: NVARCHAR2类型 这是一个包含UNICODE格式数据的变长字符串。 NVARCHAR2最多可以存储4,000字节的信息。 */ DECLARE I INT :=1; J VARCHAR2(20) :=‘1‘; BEGIN DBMS_OUTPUT.put_line(I || J); --结果为 11 END; DECLARE I INT :=1; J VARCHAR2(20) :=‘1‘; BEGIN DBMS_OUTPUT.put_line(I + J); --结果:2 ,存在隐私转换和显示转换的问题滴呀 END; DECLARE I VARCHAR2(20) :=‘1‘; J VARCHAR2(20) :=‘1‘; BEGIN DBMS_OUTPUT.put_line(I + J); --结果还是我们的2 关键看我们使用符号滴呀 END; DECLARE I INT :=1; J INT :=1; BEGIN DBMS_OUTPUT.put_line(I || J); --结果是11 ,+ 是用于数值类型之间加减,||是用于字符串之间的加减; --这个才是问题的关键滴呀 END; --时间格式的转换滴呀 SELECT SYSDATE FROM DUAL; --默认的格式是这样的: 2016/6/22 16:12:07 --然后使用我们的TO_CHAR 来进行我们时间格式的转化滴: 2016-06-22 04:06:02 SELECT TO_CHAR(SYSDATE,‘YYYY-MM-DD HH:MM:SS‘) FROM DUAL; --将数值类型转换成字符串类型; --强制显示为当地的货币类型 SELECT TO_CHAR(1200,‘L99,999.99‘) FROM DUAL; SELECT TO_CHAR(SAL,‘$00,000,00‘) FROM EMP;
这里再补充一些;
--这里还有我们的number 数据类型的值; --INTEGER是NUMBER的子类型,它等同于NUMBER(38,0),用来存储整数。若插入、更新的数值有小数,则会被四舍五入。 --FLOAT类型也是NUMBER的子类型 /*
它存储变长字符串,最多达2G的字符数据(2GB是指2千兆字节, 而不是2千兆字符),与VARCHAR2 或CHAR 类型一样,存储在LONG 类型中的文本要进行字符集转换。ORACLE建议开发中使用CLOB替代LONG类型。支持LONG 列只是为了保证向后兼容性。CLOB类型比LONG类型的限制要少得多。 LONG类型的限制如下: 1.一个表中只有一列可以为LONG型。(Why?有些不明白) 2.LONG列不能定义为主键或唯一约束, 3.不能建立索引 4.LONG数据不能指定正则表达式。 5.函数或存储过程不能接受LONG数据类型的参数。 6.LONG列不能出现在WHERE子句或完整性约束(除了可能会出现NULL和NOT NULL约束)
*/
以上是关于Oracle中的数据类型的主要内容,如果未能解决你的问题,请参考以下文章