ITPub博客

首页 > 数据库 > Oracle > oracle 基本sql 语句(oracle日期)

oracle 基本sql 语句(oracle日期)

Oracle 作者:ayanelee 时间:2011-10-01 10:55:24 0 删除 编辑
1:插入记录
格式: insert into 数据表(字段名1,字段名2,……) values(字段名1的值,字段名2的值,……)

由于字段类型的不同,在书写字段时要注意格式:

数值型字段:同sql server,可以直接写值。

字符型字段:同sql server,其值上要加单引号。

日期型字段:sql server日期型字段格式同字符型字段格式,即在其上加单引号,oracle日期型字段格式有所不同,感觉挺罗嗦的,其只有两种处理方式:

a:在其值上加单引号。且年、月、日、时、分的排列次序格式必须与oracle当前的日期型数据格式相一致(oracle中文版日期型数据默认格式为:dd-Mon-yyyy,如27-6月-07)。

例:

insert into DATA_HIS20070710(TAGINDEX,TAGVAL,TAGTIME) values('10LBD10FT001',12.082, '26-6月-07')

oracle默认日期格式可在注册表中进行更改,更改方法如下:

打开注册表,在“HKEY_LOCAL_MACHINESOFTWAREORACLEHOME0”下新建一字符串值NLS_DATE_FORMAT,并设置其值为您所需要的格式,如YYYY-MM-DD HH24:MI:SS,这样就可用通过如下sql语句插入记录了:

insert into DATA_HIS20070710(TAGINDEX,TAGVAL,TAGTIME) values('10LBD10FT001',12.082, '2004-01-05 22:09:38')

b:通过to_date()函数。可任意排列年、月、日、时、分的次序、格式。

insert into DATA_HIS20070710(TAGINDEX,TAGVAL,TAGTIME) values('10LBD10FT001',12.082,To_date('2004-01-05 22:09:38','yyyy-mm-dd hh24-mi-ss'))

2:创建表
create table DATA_HIS20070629

(

TAGINDEX VARCHAR2(20) not null,

TAGTIME DATE not null,

TAGVAL FLOAT not null

)tablespace SYNCDATA

如上sql 语句创建一张DATA_HIS20070629历史数据表,并存储于SYNCDATA表空间。

表空间类似与磁盘分区的概念,可以把数据库比喻成一个磁盘;数据库表空间比喻成磁盘分区;数据库表比喻成磁盘文件。

3:创建索引
create index IDX_HIS_DATA20070629 on DATA_HIS20070629 (TAGINDEX,TAGTIME)

tablespace SYNCSCADA

以上sql 语句为上一小节创建的DATA_HIS20070629历史数据表创建一组合索引,索引为键(TAGINDEX,TAGTIME),并存储索引于SYNCDATA表空间。

索引的概念比较复杂,简单的讲,其类似于我们中文字典前面的检字表,要在字典中查找一个汉字可以通过字母顺序检字或偏旁部首检字,同样在数据库中可以为一张表创建几个索引,用于数据表记录的快速查询。

4、创建存储过程
create or replace procedure init_db

(

tabname in varchar2, --输入参数

tabtype in number, --输入参数

tabretu out number --输出参数

}

as

table_num number; --过程内部变量

sql_string varchar2(200); --过程内部变量

begin --下面为程序体

select count(*) into table_num from tabs where table_name= tabname;

if table_num>=1 then --此表已存在

tabretu:=2; --注意此处的赋值符格式

else

sql_string:=‘create table ’||tabname||‘(

TAGINDEX VARCHAR2(20) not null,

TAGTIME DATE not null,

TAGVAL FLOAT not null)tablespace SYNCDATA’

--sql server字符串连接符为+,而oracle字符串连接符为||

tabretu:=1;

end if;

end;

以上sql 语句创建一名为init_db的存储过程。如果用户通过oledb向tabname插入一记录失败,可以通过执行此此存储过程来保证tabname表的存在。

存储过程相当于一个函数,可以由外部VC、VB等语言来调用。

5、让存储过程自动定时后台运行(存储过程作业)
1、 提交一个作业

variable job_sn;

dbms_job.submit([out]作业号,[in]存储过程名,[in]作业开始时间,[in]作业执行间隔);

如:dbms_job.submit(:job_sn,' init_db;',sysdate,'sysdate+1/1440'); 表示提交上一小节创建的存储过程init_db,并立即执行,执行周期为1分钟。

2、 删除一个作业

dbms_job.remove([in]作业号 as number);

6、number数据类型的处理

syncScada项目中所有ID字段均为number类型定义,映射到oledb时对应DB_NUMERIC (或DB_VARNUMERIC)类型,DB_NUMERIC与DB_VARNUMERIC类型的区别相当于char与varchar的区别,一个定长,一个变长。为简化处理,建议syncScada项目中均使用DB_NUMERIC来映射number字段类型。

DB_NUMERIC类型的定义如下:

Typedef struct tagDB_NUMERIC {

BYTE precision;

BYTE scale;

BYTE sign;

BYTE val[16];

} DB_NUMERIC;

其中:

.precision 表示精度,number数值长度。

.scale 表示刻度,即val中的小数位位数

.sign: sign=0表示负数,sign=1表示正数

.val 以一16-byte数组表示数值,如数值200030在val中的表示方法如下 (200030的十六进制表示为30D5E){0x5E, 0x0D, 0x03, 0x00, 0x00, 0x00, 0x00,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};

例:

DB_NUMERIC nmsample;

nmsample.precision=10;

nmsample.scale=4;

nmsample.sign=1;

unsigned char uctemp[16] = {0x5E, 0x0D, 0x03, 0x00, 0x00, 0x00, 0x00,

0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};

memcpy(nmsample.val, uctemp, 16);

此时nmsample表示的值为20.003

<!-- 正文结束 -->

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/22888680/viewspace-1117225/,如需转载,请注明出处,否则将追究法律责任。

上一篇: 没有了~
下一篇: 没有了~
请登录后发表评论 登录
全部评论

注册时间:2009-11-17