首页 > 数据库 > Oracle > oracle 基本sql 语句(oracle日期)
由于字段类型的不同,在书写字段时要注意格式:
数值型字段:同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
(
)tablespace SYNCDATA
如上sql 语句创建一张DATA_HIS20070629历史数据表,并存储于SYNCDATA表空间。
表空间类似与磁盘分区的概念,可以把数据库比喻成一个磁盘;数据库表空间比喻成磁盘分区;数据库表比喻成磁盘文件。
3:创建索引
create index IDX_HIS_DATA20070629 on
DATA_HIS20070629 (TAGINDEX,TAGTIME)
以上sql 语句为上一小节创建的DATA_HIS20070629历史数据表创建一组合索引,索引为键(TAGINDEX,TAGTIME),并存储索引于SYNCDATA表空间。
索引的概念比较复杂,简单的讲,其类似于我们中文字典前面的检字表,要在字典中查找一个汉字可以通过字母顺序检字或偏旁部首检字,同样在数据库中可以为一张表创建几个索引,用于数据表记录的快速查询。
4、创建存储过程
create or replace procedure
init_db
(
}
as
begin
else
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');
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类型的定义如下:
其中:
.precision 表示精度,number数值长度。
.scale
.sign:
.val
例:
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博客 ” ,链接:https://blog.itpub.net/22888680/viewspace-1117225/ ,如需转载,请注明出处,否则将追究法律责任。