首页    新闻    下载    文档    论坛     最新漏洞    黑客教程    数据库    搜索    小榕软件实验室怀旧版    星际争霸WEB版    最新IP准确查询   
名称: 密码:      忘记密码  马上注册
数据库 :: 数据库

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


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



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



php部分



1、mysql_num_rows和oci_num_rows

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





2、mysql_insert_id函数

mysql_insert_id是mysql取插入数据自动产生的id什么sql为insertinto 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,建一个序列,代码为:

create sequence seq_test_ids

minvalue 1

maxvalue 99999999

start with 1

increment by 1

nocache

order;







建解发器代码为:

create or replace trigger tri_test_id

before insert on test_table

for each row

declare

nextid number;

begin

IF :new.id IS NULLor :new.id=0 THEN

select seq_test_id.nextval

into nextid

from sys.dual;

:new.id:=nextid;

end if;

end tri_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程序中POST,GET提交的字符我们要用addcslashes使用反斜线转义字符串中的字符。

相当于’会转成\’,"会转成\"。但是在oracle,’转成’’,"不要处理,使用str_replace("’","’’",$str)就可以了。
<< 有关于Mysql的MERGE表类型 启动Mysql 错误 1067 进程意外终止的一种解决方法 >>
评分
10987654321
API:
gipsky.com& 安信网络
网友个人意见,不代表本站立场。对于发言内容,由发表者自负责任。

系统导航

 

Copyright © 2001-2010 安信网络. All Rights Reserved
京ICP备05056747号