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类型里,效果是一样的。

cpp代码
  1. #include <stdio.h>  
  2. #include <time.h>  
  3.  
  4. void main ()  
  5. {  
  6.     time_t rawtime;  
  7.     struct tm * timeinfo;  
  8.  
  9.     time ( &amp;rawtime );  
  10.     timeinfo = localtime ( &amp;rawtime );  
  11.     printf ( "\007The current date/time is: %s", asctime (timeinfo) );  
  12.  
  13.     char now[100];  
  14.  
  15.     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);  
  16.  
  17.     printf("%s",now);  
  18.  
  19.     exit(0);  

关于C的开发库

Mysql自带了C语言开发库,用起来还挺爽的,Oracle也有一个自己的C语言开发库,但是好像说很不爽。用Libsqlora8吧,网上说不错,下午熟悉一下先。

Tags: mysql
上一篇: 牛人写的关羽VS赵云
下一篇: 牛人写的 霍元甲,黄飞鸿和马永贞能力之理性大比拼

相关日志推荐
Mysql日期和时间函数不求人
MYSQL 4.1版本以后 UTF-8乱码问题的解决方法

0 条留言

发表评论

  
  
   (点击图片更换验证码)
点击刷新验证码