ORACLE基本数据类型
字符串
固定长度类型(CHAR/NCHAR)
CHAR:定长字符串,会用空格填充来达到其最大长度。
可变长度类型(VARCHAR2/NVARCHAR2)
NVARCHAR2:包含UNICODE格式数据的变长字符串
注意:数据库的NLS_CHARACTERSET 为AL32UTF8,即一个汉字占用三到四个字节。如果NLS_CHARACTERSET为ZHS16GBK,则一个字符占用两个字节。
数据类型 | 长度 | 说明 |
CHAR(n BYTE/CHAR) | 默认1字节,n值最大为2000 | 末尾填充空格以达到指定长度,超过最大长度报错。默认指定长度为字节数,字符长度可以从1字节到四字节。 |
NCHAR(n) | 默认1字符,最大存储内容2000字节 | 末尾填充空格以达到指定长度,n为Unicode字符数。默认为1字节。 |
NVARCHAR2(n) | 最大长度必须指定,最大存储内容4000字节 | 变长类型。n为Unicode字符数 |
VARCHAR2(n BYTE/CHAR) | 最大长度必须指定,至少为1字节或者1字符,n值最大为4000 | 变长类型。超过最大长度报错。默认存储的是长度为0的字符串。 |
VARCHAR | 同VARCHAR2 | 不建议使用 |
数字
NUMBER(P,S):
P 精度缩写,表示有效数字的位数
S 正数时,表示从小数点到最低有效数字的位数,负数时,表示从最大有效数字到小数点的位数
INTEGER和FLOAT类型也是NUMBER的子类型。
INTEGER:等同于NUMBER(38,0),用来存储整数。若插入、更新的数值有小数,则会被四舍五入。
Float(n):数 n 指示位的精度,可以存储的值的数目。N 值的范围可以从 1 到 126。
数据类型 | 长度 | 说明 |
NUMBER(p[,s]) | 1-22字节。 P取值范围1到38 S取值范围-84到127 | 存储定点数,值的绝对值范围为1.0 x 10 -130至1.0 x 10 126。值大于等于1.0 x 10 126时报错。p为有意义的10进制位数,正值s为小数位数,负值s表示四舍五入到小数点左部多少位。 |
BINARY_FLOAT | 5字节,其中有一长度字节。 | 32位单精度浮点数类型。 符号位1位,指数位8位,尾数位23位。 |
BINARY_DOUBLE | 9字节,其中有一长度字节。 | 64位双精度浮点数类型。 |
日期
DATE:Oracle 存储以下信息:世纪、 年、 月、 日期、 小时、 分钟和秒。一般占用7个字节的存储空间。
TIMESTAMP:有小数秒的信息
DATE类型转换成TIMESTAMP类型:CAST(date1 AS TIMESTAMP)
数据类型 | 长度 | 说明 |
DATE | 7字节 | 默认值为SYSDATE的年、月,日为01。包含一个时间字段,若插入值没有时间字段,则默认值为:00:00:00 or 12:00:00 for 24-hour and 12-hour clock time。没有分秒和时间区。 |
TIMESTAMP [(fractional_seconds_precision)] | 7至11字节 | fractional_seconds_precision为Oracle存储秒值小数部分位数,默认为6,可选值为0到9。没有时间区。 |
TIMESTAMP [(fractional_seconds_precision)] WITH TIME ZONE | 13字节 | 使用UTC,包含字段YEAR, MONTH, DAY, HOUR, MINUTE, SECOND, TIMEZONE_ HOUR, TIMEZONE_MINUTE |
TIMESTAMP [(fractional_seconds_precision)] WITH LOCAL TIME ZONE | 7至11字节 | 存时使用数据库时区,取时使用回话的时区。 |
INTERVAL YEAR [(year_precision)] TO MONTH | 5字节 | 包含年、月的时间间隔类型。year_precision是年字段的数字位数,默认为2,可取0至9。 |
INTERVAL DAY [(day_precision)] TO SECOND [(fractional_seconds_precision)] | 11字节 | day_precision是月份字段的数字位数,默认为2,可取0至9。 |
时间字段可取值范围:
时间字段 | 时间类型有效值 | 时间间隔类型有效值 |
YEAR | -4712至9999,包括0 | 任何整数 |
MONTH | 01至12 | 0至11 |
DAY | 01至31 | 任何整数 |
HOUR | 00 至 23 | 0 至 23 |
MINUTE | 00 至 59 | 0至 59 |
SECOND | 00 to 59.9(n),9(n)不适用与DATE类型 | 0 to 59.9(n) |
TIMEZONE_HOUR | -1至14,不适用与DATE和TIMESTAMP类型 | 不可用 |
TIMEZONE_MINUTE | 00至59,不适用与DATE和TIMESTAMP类型 | 不可用 |
TIMEZONE_REGION | 不可用 | |
TIMEZONE_ABBR | 不可用 |
LOB类型
CLOB:单字节和多字节字符数据
BLOB:非结构化的二进制数据大对象
数据类型 | 长度 | 说明 |
BLOB | 最大为(4GB-1)*数据库块大小 | 存储非结构化二进制文件。支持事务处理。 |
CLOB | 最大为(4GB-1)*数据库块大小 | 存储单字节或者多字节字符数据。支持事务处理。 |
NCLOB | 最大为(4GB-1)*数据库块大小 | 存储Unicode数据。支持事务处理。 |
BFILE | 最大为2 32-1字节 | LOB地址指向文件系统上的一个二进制文件,维护目录和文件名。不参与事务处理。只支持只读操作。 |
其他
数据类型 | 长度 | 说明 |
LONG | 最大为2GB | 变长类型,存储字符串。创建表时不要使用该类型。ORACLE建议开发中使用CLOB替代LONG类型。 |
RAW(n) | 最大2000字节,n为字节数,必须指定n | 变长类型,字符集发生变化时不会改变值。 |
LONG RAW | 最大为2GB | 变长类型,不建议使用,建议转化为BLOB类型,字符集发生变化时不会改变值。 |
ROWID | 10字节 | 代表记录的地址。显示为18位的字符串。用于定位数据库中一条记录的一个相对唯一地址值。通常情况下,该值在该行数据插入到数据库表时即被确定且唯一。 |
UROWID(n) |
LONG类型的限制如下:
1.一个表中只有一列可以为LONG型。(Why?有些不明白)
2.LONG列不能定义为主键或唯一约束,
3.不能建立索引
4.LONG数据不能指定正则表达式。
5.函数或存储过程不能接受LONG数据类型的参数。
6.LONG列不能出现在WHERE子句或完整性约束(除了可能会出现NULL和NOT NULL约束)
报错
java.sql.SQLException: 无效的列类型: 1111
sql要改成
SELECT car_num from car where car_id = #{id,jdbcType=VARCHAR}
如果id是数值 那么id = #{id,jdbcType=NUMERIC}
ORA-01000: 超出打开游标的最大数
show parameter open_cursors;
alter system set open_cursors=1000;
commit;
show parameter open_cursors;
工具使用
Oracle SQL Developer显示的时间包含时分秒
将工具--首选项--数据库--NLS--日期格式由DD-MON-RR修改为DD-MON-RR HH24:MI:SS
PLSQL数据导入
select * from xxx for update,点击那个小锁,选中第一列全部,然后从excel完全复制再粘帖提交即可