您的位置:首页 > 数据库 > Oracle

Oracle 开发常见问题

2012-01-10 16:54 393 查看
Oracle 开发常见问题

目录

Oracle的number类型数据的插入和显示

Oracle时间类型数据的插入和读出显示

Oracle自增字段

【1】Oracle的number类型数据的插入和显示

(1) 插入number类型的数据

将字符串转化为number类型数据再插入,使用 to_number 函数,实际上这里不需要转,会自动转换。

SQL> insert into TerminalDevice values ( to_number('11111111111111111112'), '1', '1', '12345678901234567890','1','1','2','3','4','5','6','7','8', to_date('2005-01-01 13:14:20','yyyy-MM-dd HH24:mi:ss'), to_date('2005-01-01 13:14:20','yyyy-MM-dd HH24:mi:ss')
);

(2) 查询显示

将Number类型数据转换为char,通过 to_char 函数。

SQL> select to_char(TerminalDevice_ID), TerminalDevice_InstallDate from TerminalDevice;

TO_CHAR(TERMINALDEVICE_ID) TERMINALDEVICE

---------------------------------------- --------------

11111111111111111111 01-1月 -05

11111111111111111112 01-1月 -05
01-1月 -05

若不转换,则会按科学计数法一样显示。

SQL> select TerminalDevice_ID, TerminalDevice_InstallDate from TerminalDevice;

TERMINALDEVICE_ID TERMINALDEVICE

----------------- --------------

1.1111E+19 01-1月 -05

1.1111E+19 01-1月 -05

【2】Oracle时间类型数据的插入和读出显示

(1) 插入日期数据:

字符转换为日期数据,字符串20050101131420转化为日期

SQL> insert into TerminalDevice (TerminalDevice_InstallDate) values ( to_date('2005-01-01 13:14:20', 'yyyy-MM-dd HH24:mi:ss') );

SQL> update TerminalDevice set TerminalDevice_InstallDate = to_date('20050101131420','yyyyMMddHH24miss') where TERMINALDEVICE_ID = 11111111111111111111

SQL> select to_date('2005-01-01 13:14:20','yyyy-MM-dd HH24:mi:ss') from dual;

TO_DATE('2005-

--------------

01-1月 -05

SQL> select to_date('20050101131420','yyyyMMddHH24miss') from dual;

SQL> select TerminalDevice_InstallDate from TerminalDevice;

TERMINALDEVICE

--------------

01-1月 -05

(2) 格式化显示日期数据

日期数据转化为字符,日期转化为字符串20050101131420

SQL> select to_char(TerminalDevice_InstallDate, 'yyyy-MM-dd HH24:mi:ss') as installDate from TerminalDevice;

INSTALLDATE

-------------------

2005-01-01 13:14:20

SQL> select to_char(TerminalDevice_InstallDate, 'yyyyMMddHH24miss') as installDate from TerminalDevice;

INSTALLDATE

--------------

20050101131420

24 小时的形式显示出来要用 HH24

select to_char(sysdate,'yyyy-MM-dd HH24:mi:ss') from dual;

select to_date('2005-01-01 13:14:20','yyyy-MM-dd HH24:mi:ss') from dual;

to_date() function

1. 日期格式参数 含义说明

D 一周中的星期几

DAY 天的名字,使用空格填充到 9 个字符

DD 月中的第几天

DDD 年中的第几天

DY 天的简写名

IW ISO 标准的年中的第几周

IYYY ISO 标准的四位年份

YYYY 四位年份

YYY,YY,Y 年份的最后三位,两位,一位

HH 小时,按 12 小时计

HH24 小时,按 24 小时计

MI 分

SS 秒

MM 月

Mon 月份的简写

Month 月份的全名

W 该月的第几个星期

WW 年中的第几个星期 1. 日期时间间隔操作

当前时间减去 7 分钟的时间

select sysdate,sysdate - interval '7' MINUTE from dual

当前时间减去 7 小时的时间

select sysdate - interval '7' hour from dual

当前时间减去 7 天的时间

select sysdate - interval '7' day from dual

当前时间减去 7 月的时间

select sysdate,sysdate - interval '7' month from dual

当前时间减去 7 年的时间

select sysdate,sysdate - interval '7' year from dual

时间间隔乘以一个数字

select sysdate,sysdate - 8 *interval '2' hour from dual

2. 日期到字符操作

select sysdate,to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') from dual

select sysdate,to_char(sysdate,'yyyy-mm-dd hh:mi:ss') from dual

select sysdate,to_char(sysdate,'yyyy-ddd hh:mi:ss') from dual

select sysdate,to_char(sysdate,'yyyy-mm iw-d hh:mi:ss') from dual

3. 字符到日期操作

select to_date('2003-10-17 21:15:37','yyyy-mm-dd hh24:mi:ss') from dual

具体用法和上面的 to_char 差不多。

4.TO_NUMBER

使用TO_NUMBER函数将字符转换为数字

TO_NUMBER(char, ['格式'])

数字格式格式

9 代表一个数字

0 强制显示0

$ 放置一个$符

L 放置一个浮动本地货币符

. 显示小数点

, 显示千位指示符

【3】Oracle自增字段

Oracle中没有像SQL Server那样有一种数据类型是自增的整形。

Oracle的自增字段通过sequence实现。

create sequence GOODS_GOODS_ID

minvalue 1

maxvalue 99999999999999999999

start with 1

increment by 1

nocache;

insert into GOODS(Goods_ID, Goods_Name, GOODS_COUNT, GOODS_UNIT, GOODS_PRICE, GOODS_DISCOUNTRATE, GOODS_MONEY, INVOICE_ID) values(GOODS_GOODS_ID.Nextval,'农夫烤鸡',10,'只','15.0','0.80','120','12345678901234567890');

insert into GOODS(Goods_ID, Goods_Name, GOODS_COUNT, GOODS_UNIT, GOODS_PRICE, GOODS_DISCOUNTRATE, GOODS_MONEY, INVOICE_ID) values(GOODS_GOODS_ID.Nextval,'魔法围巾',10,'条','100.0','0.80','800','12345678901234567890');

在oracle中sequence就是所谓的序列号,每次取的时候它会自动增加,一般用在需要按序列号排序的地方。

1、Create Sequence

你首先要有CREATE SEQUENCE或者CREATE ANY SEQUENCE权限,

CREATE SEQUENCE emp_sequence

INCREMENT BY 1 -- 每次加几个

START WITH 1 -- 从1开始计数

NOMAXvalue -- 不设置最大值

NOCYCLE -- 一直累加,不循环

CACHE 10; --设置缓存cache个序列,如果系统down掉了或者其它情况将会导致序列不连续,也可以设置为---------NOCACHE

针对S_Depart创建的sequence如下:

create sequence S_S_DEPART

minvalue 1

maxvalue 999999999999999999999999999

start with 1

increment by 1

nocache;

一旦定义了emp_sequence,你就可以用CURRVAL,NEXTVAL

CURRVAL=返回 sequence的当前值

NEXTVAL=增加sequence的值,然后返回 sequence 值

比如:

emp_sequence.CURRVAL

emp_sequence.NEXTVAL

可以使用sequence的地方:

- 不包含子查询、snapshot、VIEW的 SELECT 语句

- INSERT语句的子查询中

- NSERT语句的valueS中

- UPDATE 的 SET中

可以看如下例子:

insert into S_Depart(departId,Departname,Departorder)values(S_S_Depart.Nextval,'12345',1);
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: