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

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

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

      OCI編程高級篇(六) LOB定位符

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

      從這節開始我們來處理LOB數據的操作,LOBLarge Object的縮寫,是Oracle用于替換LONGLONG RAW類型而設置的,目前LOB的存儲數據量最大達到了128T字節。隨著LOB使用越來越頻繁,LOB的操作也變得重要。LOB主要分為CLOBBLOB兩種,分別用于存放字符數據和二進制數據。

      LOB操作中有一個重要的概念是LOB定位符,顧名思義就是通過它找到LOB數據存儲的位置,由于LOB數據與LOB列數據是分開存儲的,所以OracleLOB列數據中存儲了LOB定位符,通過定位符再找到LOB數據存儲的位置。

      OCILOB定位符是一個指針,類型為OCILobLocator,它指向一個分配的空間,空間中包含了LOB定位的信息。所以在使用LOB定位符之前,要先分配定位符,用到函數為OCIDescriptorAlloc(),先看看函數的原型和參數。

      sword OCIDescriptorAlloc ( const void *parenth,
          void    **descpp,
          ub4     type,
          size_t  xtramem_sz,
          void     **usrmempp);

      parenth是一個輸入參數,要分配描述符的父句柄,這里是環境句柄。

      descpp是一個輸出參數,是一個指針的指針,返回描述符的指針。

      type是一個輸入參數,指示返回描述符的類型,這里輸入OCI_DTYPE_LOB,返回LOB定位符。

      xtramem_sz是一個輸入參數,隨描述符額外分配的內存大小。

      usrmempp是一個輸出參數,返回用戶分配的額外內存的指針。

      OCIDescriptorAlloc()分配的描述符,需要用OCIDescriptorFree()函數釋放,不要錯用OCIHandleFree()函數。

      sword OCIDescriptorFree ( void *descp, ub4 type );

      descp是一個輸入參數,是描述符的指針。

      type是一個輸入參數,是描述符的類型。

      看一個分配LOB定位符的例子。

       

      OCIEnv        *envhp = NULL;
      int alloc_lob_locator(void){
          sword            rc;
          sb4              ec;
          OCILobLocator    *locp;
          text             errbuf[512];
      
      
          /* 分配LOB定位符 */
          rc = OCIDescriptorAlloc((const void *)envhp, (void **)&locp,
              OCI_DTYPE_LOB, 0, (void **)NULL);
          if (rc != OCI_SUCCESS) {
              OCIErrorGet(envhp, 1, NULL, &ec, errbuf, 512, OCI_HTYPE_ERROR);
              fprintf(stderr, "OCIDescriptorAlloc() - [%d] %s\n", ec, errbuf);
              return (-1);
          }
      
          /* 釋放LOB定位符 */
          rc = OCIDescriptorFree((void *)locp, OCI_DTYPE_LOB);
          if (rc != OCI_SUCCESS) {
              OCIErrorGet(errhp, 1, NULL, &ec, errbuf, 512, OCI_HTYPE_ERROR);
              fprintf(stderr, "OCIDescriptorFree() - [%d] %s\n", ec, errbuf);
              return (-1);
          }
      
          return (0);
      }

       

      LOB定位符在分配之后,只能在查詢時才有用,這時可以通過查詢結果填充LOB定位符空間,使之與一個LOB字段關聯起來,然后才能再操作這個字段。但是如果想要插入一個LOB字段,分配后的LOB定位符由于沒有內容,是不能使用的,首先要把它變成一個空LOB定位符才行,也就是要初始化這個定位符。這一步要用到OCIAttrSet()函數,設置空LOB定位符的操作如下。

      ub4    lob_empty = 0;

      if (OCI_SUCCESS != check_oci_error(errhp,
          OCIAttrSet((void *)(*locp), (ub4)OCI_DTYPE_LOB,
          (void *)&lob_empty, (ub4)0, (ub4)OCI_ATTR_LOBEMPTY, errhp))) 
          return (-1);

      這樣就創建好了一個空的LOB定位符,就可以通過OCI函數插入到一個LOB字段中了,然后通過查詢語句再把定位符與LOB字段關聯起來,就可以操作LOB字段了。那么不通過查詢關聯定位符和LOB字段可不可以呢?答案是不行。空LOB字段在插入時,Oracle要做一系列操作,才能生成真正的定位符數據,這個數據與空LOB定位符中的數據是不一樣的,所以通過空LOB定位符插入LOB字段后,不能用這個空LOB定位符直接操作LOB字段。

      下一節我們看看怎樣插入LOB數據。

       

      posted @ 2025-08-14 17:52  湯姆花花  閱讀(8)  評論(0)    收藏  舉報
      主站蜘蛛池模板: 青青青爽在线视频观看| 久久精品高清一区二区三区| 男女18禁啪啪无遮挡激烈网站| 国产真实精品久久二三区| 国产精品无码久久久久| 亚洲美免无码中文字幕在线| 欧美成人性色一区欧美成人性色区 | 国产在线超清日本一本| 国产精品天天看天天狠| 国模无吗一区二区二区视频| 正在播放酒店约少妇高潮| 中文字幕人妻有码久视频| 亚洲AV永久无码精品秋霞电影影院| 崇礼县| 国产精品无码免费播放| 亚洲精品成人片在线观看精品字幕| 国产av无码国产av毛片| 激情在线一区二区三区视频| www夜片内射视频日韩精品成人| 激情伊人五月天久久综合 | 人妻少妇精品专区性色av| 亚洲av无码牛牛影视在线二区| 午夜精品福利亚洲国产| 精品国偷自产在线视频99| 亚洲欧洲日产国码久在线| 日本一道一区二区视频| 人人爽亚洲aⅴ人人爽av人人片| 日韩亚洲国产激情一区二区| 日本人妻巨大乳挤奶水免费| 国产精品十八禁一区二区| caoporn成人免费公开| 巧家县| 亚洲av无码专区在线亚| 亚洲av日韩在线资源| 男女啪祼交视频| 日本视频一两二两三区| 在线免费播放av观看| 吉川爱美一区二区三区视频| 免费无码又爽又刺激高潮的app| 欧美人与zoxxxx另类| 四虎影视一区二区精品 |