数据库从mysql转到oracle过程、要点

上一篇 / 下一篇  2006-11-16 00:57:32

最近工作中将一论坛数据库mysql转到oracle,mysql是一个很好用的小型数据库系统,使用它开发一些小型网站和软件是完全可以胜任的,但到了对数据库高要求时,mysql可能就不大适合了,如一个大型的社区论坛,同时几千人访问,数量达到几十万,几百万时,这时候就需要使用高性能的数据库系统了。oralce  是一个大型的数据库系统,很多开发者使用它。

现在介绍使用PHP开发的系统从mysql转到oracle 过程的关键点。

php部分

1mysql_num_rowsoci_num_rows

mysql_num_rows是取mysql数据库结果集中的行数,oci_num_rowsoracle查询的所受影响的行数。结果发现oci没有类似mysql_num_rows这样的函数,最后只能想出暂时的办法,再查询一次SELECT COUNT(*) FROM ...

 

2mysql_insert_id函数

mysql_insert_idmysql取插入数据自动产生的id什么sqlinsertinto testtable(text) values ($text)$id=mysql_insert_id()oracle没有这个功能,解决办法只有写一个方法

functionget_seq_nextval($seqName) {

      $rs = $this->get_one("SELECT$seqName.nextval from sys.dual",'',0,0);

      return $rs[0];

}

使用语句$id = $db->get_seq_nextval($seqName)取序列值,后SQL语句为insert into testtable(id,text)values ($id,$text)序列将在下面介绍。

 

SQL部分

1、关键字自动递增问题

mysql中的auto_increment很好用但是oracle没有这样的功能,但是通过触发器(trigger)和序列(sequence)可以实现。

假设关键字段为id,建一个序列,代码为:

createsequenceseq_test_ids
minvalue
1
maxvalue
99999999
startwith
1
incrementby
1
nocache
order;
<!--[if !supportLineBreakNewLine]-->
<!--[endif]-->

建解发器代码为:

createorreplacetriggertri_test_id
 beforeinsertontest_table 
 foreachrow
declare
 nextidnumber;
begin
 IF:new.idISNULLor:new.id=
0THEN
   selectseq_test_id.nextval
   intonextid
   fromsys.dual;
   :new.id:=nextid;
 endif;
endtri_test_id;
OK
,上面的代码就可以实现自动递增的功能了。

2、分页LIMIT

mysql使用limit分页很方便,但是oracle分页就没有这么方便了,只有通过子查询来实现。

 

      function query($SQL,$method='',$rowfrom =0,$rows = 0) {

             if ($rowfrom || $rows) {

                    $rowfrom += 1;

                    $rowto = $rowfrom +$rows-1;

                    $SQL = 'select * from(select row_.*, rownum rownum_ from ('

                                  . $SQL . ')row_ where rownum <= '

                                  . $rowto . ')where rownum_ >= ' . $rowfrom;

             }

             

上面的代码就是查询方法的片断,这里可以看出oracle分页的实现了,$rowfrom表示第行开始,$rows表示显示的行数。

3、关键字问题

oracle中关键字是不能用做表名字段名等的,如果定要用使用要双引号括起来,如“type”。

4、单引号的处理

mysql中字符串是可以用双引号或单引号括起来。但oracle中就只能用单引号。能常在php程序中POSTGET提交的字符我们要用addcslashes使用反斜线转义字符串中的字符。

相当于会转成\’会转成\”。但是在oracle转成’’不要处理,使用str_replace(“’”,”’’”,$str)就可以了。


TAG: oracle mysql php

 

评分:0

我来说两句

显示全部

:loveliness: :handshake :victory: :funk: :time: :kiss: :call: :hug: :lol :'( :Q :L ;P :$ :P :o :@ :D :( :)

Open Toolbar