中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

php操作Oralce

發布時間:2020-04-10 02:05:28 來源:網絡 閱讀:1171 作者:ttlxihuan 欄目:web開發

Oralce與Mysql在操作上有很大區別,比如:

  1. Oralce字段使用關鍵字時需要加引號寫到SQL中,如:user,order,size等。

  2. Oralce沒有limit而需要用numrow記錄序號,如提取第三條后四數據:numrow>=3 and numrow<8

  3. 數據類型

  4. Oralce沒有auto_imcrement自增主鍵而需要使用序列等方式替代(SEQUENCE)

  5. 取最后插入主鍵,Oralce需要特殊處理,如查序列currval值

  6. Oralce寫超過4000字節數據需要特殊處理。



在這里說明自增主鍵和超過4000字節長數據。


使用序列自增

那么每個表都需要創建一個獨立的序列,創建語句是:

CREATE SEQUENCE sequence  //創建序列名稱
       [INCREMENT BY n]  //遞增的序列值是n 如果n是正數就遞增,如果是負數就遞減 默認是1
       [START WITH n]    //開始的值,遞增默認是minvalue 遞減是maxvalue
       [{MAXVALUE n | NOMAXVALUE}] //最大值
       [{MINVALUE n | NOMINVALUE}] //最小值
       [{CYCLE | NOCYCLE}] //循環/不循環
       [{CACHE n | NOCACHE}];//分配并存入到內存中


如:

CREATE SEQUENCE sq_name
    INCREMENT BY 1  -- 每次加幾個  
    START WITH 1    -- 從1開始計數  
    NOMAXVALUE      -- 不設置最大值  
    NOCYCLE         -- 一直累加,不循環  
    CACHE 10;


每個序列包含:

  NEXTVAL 返回序列中下一個有效的值,任何用戶都可以引用,插入時當主鍵值使用
  CURRVAL 中存放序列的當前值,取最后插入主鍵ID時使用


插入數據時使用: sq_name.nextval  作為主鍵值(注意不能加引號)

如:

insert into table_name(id,name)value(sq_name.nextval,"OK");

取出最近插入主鍵則需要使用SQL查詢:

SELECT sq_name.currval currval FROM dual


插入超長內容

oralce官方文檔說明:http://www.oracle.com/technetwork/articles/fuecks-lobs-095315.html


使用oci函數處理:

//說明 empty_clob() 是創建一個空的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);
//創建新的空 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) or die ("Unable to execute query\n");

//給OCI-Lob對象保存長文本內容,注意這里傳入的參數將全部寫入點位符中。
if ( !$mylob->save( 'UPDATE: '.date('H:i:s',time()) ) ) {

    //保存失敗回滾
    oci_rollback($conn);
    
    die("Unable to update lob\n");
    
}
//保存成功提交
oci_commit();

說明:如果使用oci函數在使用點位符時需要嚴格按數據類型走,否則會出錯,所以使用oci_bind_by_name的方式時需要格外注意每個字段的數據類型是否匹配。


使用PDO處理:

//鏈接數據庫
$pod=new PDO('oci:dbname=test;charset=utf8','system','admin123456');

//預處理SQL
$sth=$pod->prepare("INSERT INTO mylobs (id, mylob) VALUES (tslbh_xk.nextval, ?)");

//要寫入的clob越長內容
$val='INSERT:test contents';

//綁定參數,注意當是lob類型時需要指定數據長度,否則會報錯類型不對
$sth->bindParam(1, $val, PDO::PARAM_STR,strlen($val));

//執行SQL
$sth->execute() or die ("Unable to execute query\n");

說明:使用PDO的占位符也是需要指定數據類型,默認是PDO::PARAM_STR,包含execute函數。


最后因能力有限如果文本有錯還請指出!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

綦江县| 临清市| 普宁市| 沁水县| 休宁县| 崇州市| 绥宁县| 通城县| 张家港市| 大宁县| 林芝县| 汝城县| 鄂伦春自治旗| 天门市| 阿勒泰市| 合江县| 恭城| 二连浩特市| 靖西县| 巩留县| 龙江县| 临邑县| 阜宁县| 白水县| 定结县| 聂荣县| 滦南县| 奎屯市| 延安市| 色达县| 郓城县| 金坛市| 曲松县| 莱阳市| 乃东县| 沁阳市| 张北县| 十堰市| 博湖县| 宁波市| 四川省|