<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      OCI編程基礎篇(十) 其他相關函數

      訪問www.tomcoding.com網站,學習Oracle內部數據結構,詳細文檔說明,下載Oracle的exp/imp,DUL,logminer,ASM工具的源代碼,學習高技術含量的內容。

      在前面的OCI編程基礎中有些函數還有替代品,我們在這里介紹一下,希望你在看到別的代碼中用了不同的函數而不至于迷惑。

      前面我們介紹綁定函數時用到了OCIBindByPos()函數,這是一個按照占位符位置來綁定變量的函數,還有一個相關的函數叫OCIBindByName(),是按照占位符的名稱來綁定變量的。函數原型如下。

      sword OCIBindByName ( OCIStmt *stmtp,
          OCIBind         **bindpp,
          OCIError        *errhp,
          const OraText *placeholder,
          sb4                  placeh_len,
          void                 *valuep,
          sb4                  value_sz,
          ub2                  dty,
          void                 *indp,
          ub2                  *alenp,
          ub2                  *rcodep,
          ub4                  maxarr_len,
          ub4                  *curelep,
          ub4                  mode );

      其他參數都與OCIBindByPos()函數一樣,只是原來的position參數變成了兩個參數,一個是占位符的名稱,一個是占位符的長度,參數含義如下。

      placeholder是一個輸入參數,是占位符的名稱,以NULL結尾的字符串。

      placeh_len是一個輸入參數,是上面占位符名稱的長度,以字節計算。

      我們前面的例子中向test_tab中插入一條數據,用位置綁定函數時SQL語句為INSERT INTO test_tab VALUES (:1, :2, :3),那么用名稱綁定函數時SQL語句就是INSERT INTO test_tab VALUES (:v_id, :v_name, :v_addr)。那么在綁定時函數應該是下面這樣的,只拿第一個字段ID作為例子。

      rc = OCIBindByName(smtp, errhp, ":v_id", strlen(":v_id"), &id, 4, SQLT_INT,

                  &ind_id, &alen_id, &rcode_id, 0, NULL, OCI_DEFAULT);

      上面灰色背景的部分,就是綁定占位符名稱的示例,函數通過這個名稱在SQL語句文本中進行匹配。

      綁定函數有位置綁定和名稱綁定兩個函數,但是定義函數只有位置定義一個函數,這一點要注意。

      前面我們在查詢語句返回結果集時用到了OCIStmtFetch()函數,這個函數在11g之后被廢棄掉了,代替它的是OCIStmtFetch2()函數,讓程序員能更好的控制怎樣獲取結果集中的數據。

      sword OCIStmtFetch2 ( OCIStmt *stmthp,
          OCIError *errhp,
          ub4         nrows,
          ub2         orientation,
          sb4         fetchOffset,
          ub4         mode );

      參數stmthperrhpnrowsmodeOCIStmtFetch()中的一樣,不同的是下面兩個參數。

      orientation,取數據的方向,現在有了更多的選擇。

      OCI_DEFAULT - OCI_FETCH_NEXT一樣,作為缺省值。

      OCI_FETCH_CURRENT - 獲取當前行的數據。

      OCI_FETCH_NEXT - 獲取當前行的下一條數據。

      OCI_FETCH_FIRST - 取結果集中的第一條數據。

      OCI_FETCH_LAST - 取結果集中的最后一條數據。

      OCI_FETCH_PRIOR - 取當前行的上一條數據。

      OCI_FETCH_ABSOLUTE - 獲取fetchOffset參數指定行號的那條數據。

      OCI_FETCH_RELATIVE - 獲取fetchOffset參數指定的相對于當前行的那行數據。

      fetchOffset是一個新增加的輸入參數,指定獲取數據的偏移量,也就是行號。上面參數中取絕對數據時,fetchOffset指定結果集中的數據絕對行號。上面參數中取相對數據時,fetchOffset指定結果集中相對當前行號的偏移量,比如fetchOffset=5,那么是當前行號加5后的行號,所在的數據。如果fetchOffset=-3,那么是當前行號減3后的行號,所在的數據,相當于當前行前面第三行的數據。

      前幾節的例子中我們在表中插入一條數據后,要提交改變,相當于sqlplus中的commit命令。如果我們不想提交改變,怎樣放棄數據呢?在sqlplus中會用到rollback命令,那么在OCI中也有一個函數對應,叫做OCITransRollback()。看一下它的原型和參數。

      sword OCITransRollback ( void *svchp,
            OCIError *errhp,
            ub4 flags );

      svchp是一個輸入參數,服務上下文句柄。

      errhp是一個輸入參數,錯誤句柄,返回錯誤碼和錯誤信息文本。

      flags是一個輸入參數,唯一值為OCI_DEFAULT

      當調用OCI函數更改數據時(包括插入、更新、刪除,還有其他操作),如果沒有用OCITransCommit()函數顯式提交改變,而是直接斷開數據庫連接,那么Oracle不會回滾這些操作,而是做了隱式提交,改變已經記錄到了數據庫中,所以在斷開數據庫前有不確定的數據改變,要用OCITransRollback()函數把改變回滾回來。

      posted @ 2025-08-14 17:30  湯姆花花  閱讀(10)  評論(0)    收藏  舉報
      主站蜘蛛池模板: 亚洲人妻一区二区精品| 久热久视频免费在线观看| 久久久久国产一级毛片高清版A| 中文字幕人妻色偷偷久久| 久久婷婷大香萑太香蕉av人| 亚洲av专区一区| 亚洲av高清一区二区| 亚洲精品成人片在线观看精品字幕 | 国产成人一区二区视频免费| 人妻精品中文字幕av| 黑人玩弄人妻中文在线| 久久综合给合久久狠狠狠88| av色欲无码人妻中文字幕| 精品人妻av综合一区二区| 精品无码久久久久久尤物| 国产99青青成人A在线| 国产一区在线播放av| 国产天美传媒性色av高清| 国产成AV人片久青草影院| 日韩加勒比一本无码精品| 亚洲高潮喷水无码AV电影| 久久久久久久一线毛片| 色一情一乱一区二区三区码| 精品人妻人人做人人爽| 一本色道久久加勒比综合 | 伊人久久大香线蕉综合网| 无码精品一区二区免费AV| 欧美videosdesexo吹潮| 丁香婷婷无码不卡在线| 欧美交a欧美精品喷水| av色蜜桃一区二区三区| 最新国产精品中文字幕| 国产成人综合欧美精品久久| 久久99日韩国产精品久久99| 欧洲精品免费一区二区三区| 我要看特黄特黄的亚洲黄片| 国产三级精品福利久久| 亚洲熟女国产熟女二区三区| 色欲国产精品一区成人精品| 福利一区二区1000| 精品人妻免费看一区二区三区|