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
  • **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个字节存储,内部运算类型为整形
插入语句 结果
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
2
declare var_job emp.job%type;
var_job 和emp.job的数据类型一样

RECORD类型

这是一种结构化的数据类型

使用type语句进行定义

into 子句,位于select 子句的后面,用于将从数据库检索的数据存储到变量里。

notes:into子句只能存储一个单独的值,所以select 之句只能返回一行数据,需要用where进行限定,如果返回多行数据会返回错误信息。

%ROWTYPE

根据表中行的结构定义的一种特殊的数据类型,用来存储数据表中检索的一行数据

1
2
3
4
5
rowVar_name table_name%rowtype;

rowVar_name :存储一行的数据的变量名

table_name:指定的表名

变量和常量的定义

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
2
3
4
5
6
7
8
9
DECLARE
a number(30) := 0;
BEGIN
for i in 1 .. 10 loop
--INSERT INTO FW_TEST(NAME) VALUES('bbb' + i);
sys.dbms_output.put_line('bbb' || i);
end loop;
commit;
END;

说明:

  • DECLARE:

    申明变量语句,变量名可以在BEGIN…END语块中使用。

  • BEGIN…END

    1
    语句块,相当于java中的{}.
  • for i in 1 .. 10 loop … end loop

    1
    for循环语法,变量i,从1开始,直到10才遍历结束