oracle使用
oracle 数据类型(全大写)
Oracle基本数据类型可以按类型分为:字符串类型、数字类型、日期类型、LOB类型、LONG RAW&RAW类型、ROWID&UROWID类型。
数值类型
- NUMBER(M,n) — 整数/浮点数,m:有效数字个数,n:小数点后个数
- OLS_INTEGER — 只能存储整数
- binary_Integer — 只能存储整数
字符类型
字符串数据类型可以依据存储空间分为固定长度类型(CHAR/NCHAR) 和可变长度类型(VARCHAR2/NVARCHAR2)两种。
- 固定长度:是指虽然输入的字段值小于该字段的限制长度,但是实际存储数据时,会先
自动向右补足空格
后,才将字段值的内容存储到数据块中。 - 可变长度:是指当输入的字段值小于该字段的限制长度时,直接将字段值的内容存储到数据块中,而
不会补上空白
,这样可以节省数据块空间。
- 固定长度:是指虽然输入的字段值小于该字段的限制长度,但是实际存储数据时,会先
char(maxlength;2000字节):指定长度的字符串,默认为1,赋值给大的会用空格填充来达到其最大长度。另外你可以指定它存储字节或字符,例如 CHAR(12 BYTYE)、CHAR(12 CHAR)。一般来说默认是存储字节。
nchar(8.0以后出现):一个包含UNICODE格式数据的定长字符串。NCHAR字段最多可以存储2000字节的信息,它的最大长度取决于国家字符集。
varchar2(maxlength:4000字节):可变长度的字符,maxlength(必须指定):最大32767
nvarchar2:一个包含UNICODE格式数据的变长字符串,NVARCHAR2最多可以存储4000字节的信息。
Long:可变长字符串,最大32767字节,数据库最大(2G)
日期类型
DATE:可以保存日期和时间,常用日期处理都可以采用这种类型。DATE表示的日期范围可以是公元前4712年1月1日至公元9999年12月31日
- date类型在数据库中的存储固定为7个字节,格式为:
第1字节:世纪+100
第2字节:年
第3字节:月
第4字节:天
第5字节:小时+1
第6字节:分+1
第7字节:秒+1
- date类型在数据库中的存储固定为7个字节,格式为:
**TIMESTAMP(p)**:与date的区别是不仅可以保存日期和时间,还能保存小数秒
- 小数位数可以指定为0-9,默认为6位,所以最高精度可以到ns(纳秒),数据库内部用7或者11个字节存储
- 如果精度为0,则用7字节存储,与date类型功能相同,
- 如果精度大于0则用11字节存储。
- 格式为:
第1字节:世纪+100
第2字节:年
第3字节:月
第4字节:天
第5字节:小时+1
第6字节:分+1
第7字节:秒+1
第8-11字节:纳秒,采用4个字节存储,内部运算类型为整形
- 小数位数可以指定为0-9,默认为6位,所以最高精度可以到ns(纳秒),数据库内部用7或者11个字节存储
插入语句 | 结果 |
---|---|
insert into t_timestamp values(‘22-12月-2018’); | 22-12月-18 12.00.00.000000 上午 |
insert into t_timestamp values(to_date(‘2018-12-22’, ‘yyyy-mm-dd’)); | 22-12月-18 12.00.00.000000 上午 |
insert into t_timestamp values(to_date(‘2018-12-22 15:22:26’, ‘yyyy-mm-dd hh24:mi:ss’)); | 22-12月-18 03.22.26.000000 下午 |
insert into t_timestamp values(to_timestamp(‘2018-12-22 15:22:26.256’, ‘yyyy-mm-dd hh24:mi:ss.ff‘)); | 22-12月-18 03.22.26.256000 下午#注意:未指定毫秒数长度时,根据具体值的毫秒数进行转换(比如6位就转为6位)。 |
insert into t_timestamp values(to_timestamp(‘2018-12-22 15:22:26.2567’, ‘yyyy-mm-dd hh24:mi:ss.ff4‘)); | 22-12月-18 03.22.26.256700 下午#指定毫秒数 |
插入语句 | 结果 |
---|---|
insert into t_date values(‘22-12月-2018’); | 2018/12/22 |
insert into t_date values(to_date(‘2018-12-22’, ‘yyyy-mm-dd’)); | 2018/12/22 |
insert into t_date values(to_date(‘2018-12-22 15:22:16’, ‘yyyy-mm-dd hh24:mi:ss’)); | 2018/12/22 15:22:16 |
insert into t_date values(‘2018-12-22’); | ORA-01861: 文字与格式字符串不匹配 |
insert into t_date values(‘22-12-18’); | ORA-01843: 无效的月份 |
insert into t_date values(‘22-12-2018’); | ORA-01843: 无效的月份 |
insert into t_date values(‘12月-22-2018’); | ORA-01861: 文字与格式字符串不匹配 |
insert into t_date values(‘22-12月-2018 10:17:25’); | ORA-01830: 日期格式图片在转换整个输入字符串之前结束 |
insert into t_date values(to_date(‘2018-12-22 15:22:16’, ‘yyyy-mm-dd hh:mi:ss’)); | ORA-01849: 小时值必须介于 1 和 12 之间 |
boolean
取值: TRUE/FAlSE/NULL
特殊数据
%TYPE
1 | declare var_job emp.job%type; |
RECORD类型
这是一种结构化的数据类型
使用type语句进行定义
into 子句,位于select 子句的后面,用于将从数据库检索的数据存储到变量里。
notes:into子句只能存储一个单独的值,所以select 之句只能返回一行数据,需要用where进行限定,如果返回多行数据会返回错误信息。
%ROWTYPE
根据表中行的结构定义的一种特殊的数据类型,用来存储数据表中检索的一行数据
1 | rowVar_name table_name%rowtype; |
变量和常量的定义
PL/SQL中变量的定义要求在变量名子啊数据类型的前面,长度和出初始值可选
定义变量
1 | var_countryname varchar2(50):='中国' |
定义常量
1 | con_day constant integer:=365 |
变量的初始化
PL/SQL定义的变量初始值为NULL
PL/SQL表达式
表达式的结果是一个值;
表达式作为赋值语句的一部分出现在赋值运算符的右边,或作为函数的参数
字符表达式
唯一的是“||” ,
作用:把几个字符串连接在一起
如:
1 | 'hello'||'world'||'!'的值为'helloworld!' |
布尔表达式
是一个判断结果是为真还是假的条件
流程控制语句
选择语句if…then
if…then…else
IF … then …elsif 语句
case语句
从oracle 9i以后出现
循环语句
主要包括:LOOP/while/for
LOOP(至少一遍)
while(先判断后执行)
for循环
demo:
1 | DECLARE |
说明:
DECLARE:
申明变量语句,变量名可以在BEGIN…END语块中使用。
BEGIN…END
1
语句块,相当于java中的{}.
for i in 1 .. 10 loop … end loop
1
for循环语法,变量i,从1开始,直到10才遍历结束