您好,登錄后才能下訂單哦!
Oralce與Mysql在操作上有很大區(qū)別,比如:
Oralce字段使用關(guān)鍵字時需要加引號寫到SQL中,如:user,order,size等。
Oralce沒有l(wèi)imit而需要用numrow記錄序號,如提取第三條后四數(shù)據(jù):numrow>=3 and numrow<8
數(shù)據(jù)類型
Oralce沒有auto_imcrement自增主鍵而需要使用序列等方式替代(SEQUENCE)
取最后插入主鍵,Oralce需要特殊處理,如查序列currval值
Oralce寫超過4000字節(jié)數(shù)據(jù)需要特殊處理。
在這里說明自增主鍵和超過4000字節(jié)長數(shù)據(jù)。
使用序列自增
那么每個表都需要創(chuàng)建一個獨立的序列,創(chuàng)建語句是:
CREATE SEQUENCE sequence //創(chuàng)建序列名稱 [INCREMENT BY n] //遞增的序列值是n 如果n是正數(shù)就遞增,如果是負數(shù)就遞減 默認是1 [START WITH n] //開始的值,遞增默認是minvalue 遞減是maxvalue [{MAXVALUE n | NOMAXVALUE}] //最大值 [{MINVALUE n | NOMINVALUE}] //最小值 [{CYCLE | NOCYCLE}] //循環(huán)/不循環(huán) [{CACHE n | NOCACHE}];//分配并存入到內(nèi)存中
如:
CREATE SEQUENCE sq_name INCREMENT BY 1 -- 每次加幾個 START WITH 1 -- 從1開始計數(shù) NOMAXVALUE -- 不設(shè)置最大值 NOCYCLE -- 一直累加,不循環(huán) CACHE 10;
每個序列包含:
NEXTVAL 返回序列中下一個有效的值,任何用戶都可以引用,插入時當主鍵值使用
CURRVAL 中存放序列的當前值,取最后插入主鍵ID時使用
插入數(shù)據(jù)時使用: sq_name.nextval 作為主鍵值(注意不能加引號)
如:
insert into table_name(id,name)value(sq_name.nextval,"OK");
取出最近插入主鍵則需要使用SQL查詢:
SELECT sq_name.currval currval FROM dual
插入超長內(nèi)容
oralce官方文檔說明:http://www.oracle.com/technetwork/articles/fuecks-lobs-095315.html
使用oci函數(shù)處理:
//說明 empty_clob() 是創(chuàng)建一個空的clob如果是blob則使用empty_blob。 //需要增加 RETURNING語句來綁定空clob并指定占位符。 //插入與修改類似 $sql = "UPDATE mylobs SET mylob = EMPTY_CLOB() WHERE id = 2403 RETURNING mylob INTO :mylob"; $stmt = oci_parse($conn, $sql); //創(chuàng)建新的空 LOB 或 FILE 描述符,生成一個OCI-Lob對象,注意使用這個寫文本實際是SQL先執(zhí)行后回填內(nèi)容,所以不能自動提交 $mylob = oci_new_descriptor($conn,OCI_D_LOB); //綁定占位符數(shù)據(jù),注意最后一個參數(shù)一定要與字段數(shù)據(jù)類型一樣。 oci_bind_by_name($stmt,':mylob',$mylob, -1, OCI_B_CLOB); //執(zhí)行預處理SQL,注意不能自動提交需要一定要增加第二個參數(shù),否則長文本無法寫入。 oci_execute($stmt, OCI_DEFAULT) or die ("Unable to execute query\n"); //給OCI-Lob對象保存長文本內(nèi)容,注意這里傳入的參數(shù)將全部寫入點位符中。 if ( !$mylob->save( 'UPDATE: '.date('H:i:s',time()) ) ) { //保存失敗回滾 oci_rollback($conn); die("Unable to update lob\n"); } //保存成功提交 oci_commit();
說明:如果使用oci函數(shù)在使用點位符時需要嚴格按數(shù)據(jù)類型走,否則會出錯,所以使用oci_bind_by_name的方式時需要格外注意每個字段的數(shù)據(jù)類型是否匹配。
使用PDO處理:
//鏈接數(shù)據(jù)庫 $pod=new PDO('oci:dbname=test;charset=utf8','system','admin123456'); //預處理SQL $sth=$pod->prepare("INSERT INTO mylobs (id, mylob) VALUES (tslbh_xk.nextval, ?)"); //要寫入的clob越長內(nèi)容 $val='INSERT:test contents'; //綁定參數(shù),注意當是lob類型時需要指定數(shù)據(jù)長度,否則會報錯類型不對 $sth->bindParam(1, $val, PDO::PARAM_STR,strlen($val)); //執(zhí)行SQL $sth->execute() or die ("Unable to execute query\n");
說明:使用PDO的占位符也是需要指定數(shù)據(jù)類型,默認是PDO::PARAM_STR,包含execute函數(shù)。
最后因能力有限如果文本有錯還請指出!
免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。