php操作Oralce
Oralce与Mysql在操作上有很大区别,比如:
Oralce字段使用关键字时需要加引号写到SQL中,如:user,order,size等。
Oralce没有limit而需要用numrow记录序号,如提取第三条后四数据:numrow>=3 andnumrow<8
数据类型
Oralce没有auto_imcrement自增主键而需要使用序列等方式替代(SEQUENCE)
取最后插入主键,Oralce需要特殊处理,如查序列currval值
Oralce写超过4000字节数据需要特殊处理。
在这里说明自增主键和超过4000字节长数据。
使用序列自增
那么每个表都需要创建一个独立的序列,创建语句是:
CREATESEQUENCEsequence//创建序列名称[INCREMENTBYn]//递增的序列值是n如果n是正数就递增,如果是负数就递减默认是1[STARTWITHn]//开始的值,递增默认是minvalue递减是maxvalue[{MAXVALUEn|NOMAXVALUE}]//最大值[{MINVALUEn|NOMINVALUE}]//最小值[{CYCLE|NOCYCLE}]//循环/不循环[{CACHEn|NOCACHE}];//分配并存入到内存中
如:
CREATESEQUENCEsq_nameINCREMENTBY1--每次加几个STARTWITH1--从1开始计数NOMAXVALUE--不设置最大值NOCYCLE--一直累加,不循环CACHE10;
每个序列包含:
NEXTVAL 返回序列中下一个有效的值,任何用户都可以引用,插入时当主键值使用
CURRVAL 中存放序列的当前值,取最后插入主键ID时使用
插入数据时使用: sq_name.nextval 作为主键值(注意不能加引号)
如:
insertintotable_name(id,name)value(sq_name.nextval,"OK");
取出最近插入主键则需要使用SQL查询:
SELECTsq_name.currvalcurrvalFROMdual
插入超长内容
oralce官方文档说明:http://www.oracle.com/technetwork/articles/fuecks-lobs-095315.html
使用oci函数处理:
//说明empty_clob()是创建一个空的clob如果是blob则使用empty_blob。//需要增加RETURNING语句来绑定空clob并指定占位符。//插入与修改类似$sql="UPDATEmylobsSETmylob=EMPTY_CLOB()WHEREid=2403RETURNINGmylobINTO:mylob";$stmt=oci_parse($conn,$sql);//创建新的空LOB或FILE描述符,生成一个OCI-Lob对象,注意使用这个写文本实际是SQL先执行后回填内容,所以不能自动提交$mylob=oci_new_descriptor($conn,OCI_D_LOB);//绑定占位符数据,注意最后一个参数一定要与字段数据类型一样。oci_bind_by_name($stmt,':mylob',$mylob,-1,OCI_B_CLOB);//执行预处理SQL,注意不能自动提交需要一定要增加第二个参数,否则长文本无法写入。oci_execute($stmt,OCI_DEFAULT)ordie("Unabletoexecutequery\n");//给OCI-Lob对象保存长文本内容,注意这里传入的参数将全部写入点位符中。if(!$mylob->save('UPDATE:'.date('H:i:s',time()))){//保存失败回滚oci_rollback($conn);die("Unabletoupdatelob\n");}//保存成功提交oci_commit();
说明:如果使用oci函数在使用点位符时需要严格按数据类型走,否则会出错,所以使用oci_bind_by_name的方式时需要格外注意每个字段的数据类型是否匹配。
使用PDO处理:
//链接数据库$pod=newPDO('oci:dbname=test;charset=utf8','system','admin123456');//预处理SQL$sth=$pod->prepare("INSERTINTOmylobs(id,mylob)VALUES(tslbh_xk.nextval,?)");//要写入的clob越长内容$val='INSERT:testcontents';//绑定参数,注意当是lob类型时需要指定数据长度,否则会报错类型不对$sth->bindParam(1,$val,PDO::PARAM_STR,strlen($val));//执行SQL$sth->execute()ordie("Unabletoexecutequery\n");
说明:使用PDO的占位符也是需要指定数据类型,默认是PDO::PARAM_STR,包含execute函数。
最后因能力有限如果文本有错还请指出!
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。