Oracle 和 Mysql的不同
网管项目本来使用Mysql来存储数据的,但是由于其他模块都使用Oracle数据库,所以现在要想Oracle迁移。
数据库转换是个比较头疼的事,搞了一上午,总算搞定了,记录下来
关于自增字段
需要先建立一个序列,比如INCSNMPID,完全默认就可以了。然后在相应的表里面建一个触发器,比如TRG_SNMPINFO,事件选项里面记得要选对表,不然触发器就建到别的表里面了。然后选择触发事件,这里选插入,那个之前不要动,这表示插入之前先进行序列的计算。高级选项里面的逐行触发也选上。
下面就需要手工填写触发器主体了
照着下面的来
DECLARE
new_ID number; //声明一个变量
BEGIN
select INCSNMPID.nextval into new_id from DUAL; //你定义的序列.nextval存入new_id,注意from DUAL不要动
:new.ID := new_ID; //把new_ID复制给新行的ID
END;
关于SQL的不同
Oracle使用用户来区分数据库,然后每个数据库里面有很多方案,方案下分布着各个表,所以写SQL的时候每个表要指定方案名,比如INSERT INTO "XDB"."SNMPINFO" ("ID",....
Mysql为了把表名,列名什么的和其他字符区分开,推荐使用`SNMPINFO`这样的形式把表名列名括起来,这个在Oracle里面不适用了,不需以"把这些内容括起来,实验发现好像'都不行,必须用",VALUES里面的数据用'。
关于datetime数据类型
Mysql里面datetime数据类型在添加的时候可以直接用NOW()来添加当前时间非常方便,Oracle没有这个功能,网上搜了一个C获取当前时间的代码,把内容组织好后在填到Oracle的varchar2类型里,效果是一样的。
- #include <stdio.h>
- #include <time.h>
- void main ()
- {
- time_t rawtime;
- struct tm * timeinfo;
- time ( &rawtime );
- timeinfo = localtime ( &rawtime );
- printf ( "\007The current date/time is: %s", asctime (timeinfo) );
- char now[100];
- sprintf ( now,"%4d-%02d-%02d %02d:%02d:%02d\n",1900+timeinfo->tm_year,1+timeinfo->tm_mon,timeinfo->tm_mday,timeinfo->tm_hour,timeinfo->tm_min,timeinfo->tm_sec);
- printf("%s",now);
- exit(0);
- }
关于C的开发库
Mysql自带了C语言开发库,用起来还挺爽的,Oracle也有一个自己的C语言开发库,但是好像说很不爽。用Libsqlora8吧,网上说不错,下午熟悉一下先。
0 条留言
发表评论