<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網(wǎng)站,學(xué)習(xí)Oracle內(nèi)部數(shù)據(jù)結(jié)構(gòu),詳細(xì)文檔說明,下載Oracle的exp/imp,DUL,logminer,ASM工具的源代碼,學(xué)習(xí)高技術(shù)含量的內(nèi)容。

      有分片插入的操作,就會有分片查詢的操作,分片插入用OCI_DATA_AT_EXEC模式來綁定輸入變量,分片查詢需要用到OCI_DYNAMIC_FETCH模式來定義輸出變量。分片查詢的步驟如下。

      1. 分片OCI語句句柄。

      2. 準(zhǔn)備SQL語句,語法分析。

      3. 定義輸出變量,輸出變量為空指針,運(yùn)行時再提供緩沖區(qū)。使用OCI_DYNAMIC_FETCH模式。

      4. 執(zhí)行查詢語句。

      5. 執(zhí)行OCIStmtFetch()函數(shù),這時會返回OCI_NEED_DATA

      6. 執(zhí)行OCIStmtSetPieceInfo()函數(shù),指定接收數(shù)據(jù)的緩沖區(qū)地址和緩沖區(qū)大小。

      7. 再執(zhí)行OCIStmtFetch()函數(shù),這時接收緩沖區(qū)中會有返回的數(shù)據(jù),如果沒有后續(xù)的數(shù)據(jù)了,Fetch函數(shù)會返回OCI_SUCESS,整個分片查詢結(jié)束,如果還有剩余數(shù)據(jù),Fetch函數(shù)還會返回OCI_NEED_DATA,這時跳到第6步,繼續(xù)執(zhí)行。

      我們把上一次插入的數(shù)據(jù)再讀出來,使用分片查詢的步驟,請看完整的代碼。

       

      OCIEnv       *envhp = NULL;
      OCIError     *errhp = NULL;
      OCIServer    *svrhp = NULL;
      OCISession   *usrhp = NULL;
      OCISvcCtx    *svchp = NULL;
      OCIStmt      *smthp = NULL;
       
      /* 分片查詢LONG數(shù)據(jù) */
      int select_long_piece(void){
          sword          rc;
          int            slen;
          sb2            ind_info;
          ub4            alen_info;
          ub2            rcode_info;
          OCIDefine      *defp;
          char           sqltxt[1024];
          char           long_buf[4096];
       
          /* 分配OCI語句句柄 */
          rc = OCIHandleAlloc(
              (void *)envhp,
              (void **)&smthp,
              OCI_HTYPE_STMT,
              0,
              (void **)NULL
          );
       
          if (rc != OCI_SUCCESS) {
              fprintf(stderr, "OCIHandleAlloc() - allocate statement handle error !\n");
              return (-1);
          }
       
          /* 生成SQL語句文本 */
          strcpy(sqltxt, "SELECT INFO FROM test_long_tab WHERE ID=1");
          slen = strlen(sqltxt);
       
          /* 準(zhǔn)備語句 */
          if (check_oci_error(errhp,
              OCIStmtPrepare(smthp, errhp, (const OraText *)sqltxt, slen,
                  OCI_NTV_SYNTAX, OCI_DEFAULT)) < 0)
              return (-1);
       
          /* 定義INFO的輸出變量,使用NULL值,使用OCI_DYNAMIC_FETCH模式,
           * value_sz要設(shè)置成讀取數(shù)據(jù)的最大值
           */
          if (check_oci_error(errhp,
              OCIDefineByPos((OCIStmt *)smthp,
                  (OCIDefine **)&defp,
                  errhp,
                  (ub4)1,                /* position */
                  (void *)NULL,       /* valuep */
                  (sb4)0x7FFFFFFF,    /* value_sz */
                  (ub2)SQLT_LNG,      /* dty */
                  (void *)NULL,       /* indp */
                  (ub2 *)NULL,        /* alenp */
                  (ub2 *)NULL,        /* column return code pointer */
                  (ub4)0,             /* maxarr_len */
                  (ub4 *)NULL,        /* curelep */
                  (ub4)OCI_DYNAMIC_FETCH)
              ) < 0)
              return (-1);
       
       
          /* 執(zhí)行OCI語句 */
          if (check_oci_error(errhp,
              OCIStmtExecute(svchp,
                  smthp,              /* stmthp */
                  errhp,              /* errhp */
                  0,                  /* iters */
                  0,                  /* rowoff */
                  NULL,               /* snap_in */
                  NULL,               /* snap_out */
                  OCI_DEFAULT)        /* mode */
              ) < 0)
              return (-1);
      
          /* 循環(huán)處理獲取的數(shù)據(jù),在這里為了方便,只把數(shù)據(jù)長度打印出來 */
          while (1) {
              if ((rc = check_oci_error(errhp,
                  OCIStmtFetch(smthp, errhp, 1, OCI_FETCH_NEXT, OCI_DEFAULT))) < 0)
                  return (-1);
      
              if (rc == OCI_SUCCESS) {
                  /* 返回數(shù)據(jù)完畢,退出循環(huán),注意這里還有數(shù)據(jù),要處理掉 */
                  fprintf(stdout, "data actual length: %d\n", alen_info);
                  break;
              }
       
              if (rc != OCI_NEED_DATA) {
                  fprintf(stderr, "data fetch not completed !\n");
                  return (-1);
              }
       
              /* 處理數(shù)據(jù) */
              fprintf(stdout, "data actual length: %d\n", alen_info);
      
              /* 設(shè)置數(shù)據(jù)片信息,alen_info設(shè)置一次返回的最大數(shù)據(jù)量 */
              alen_info = 4000;
              if (check_oci_error(errhp,
                  OCIStmtSetPieceInfo((void *)defp, OCI_HTYPE_DEFINE,
                      errhp, (const void *)long_buf, &alen_info,
                      OCI_ONE_PIECE, (const void *)&ind_info, &rcode_info)
                  ) < 0)
                  return (-1);
          }
       
          return (0);
      }

       

      posted @ 2025-08-14 17:49  湯姆花花  閱讀(6)  評論(0)    收藏  舉報
      主站蜘蛛池模板: 99久久久无码国产麻豆| 日本在线a一区视频高清视频| 新源县| 日韩人妻无码一区二区三区俄罗斯| 99久久婷婷国产综合精品青草漫画| 狠狠色噜噜狠狠狠狠色综合网 | 色窝窝免费播放视频在线| 四川少妇被弄到高潮| 国产激情第一区二区三区| 国产成人精品一区二区无| 国产AV大陆精品一区二区三区| 精品尤物TV福利院在线网站| 激情内射亚洲一区二区三区| 欧美人成精品网站播放| 亚洲护士一区二区三区| 99久久精品午夜一区二区| 免费ā片在线观看| 99久热在线精品视频| 大香伊蕉在人线国产最新2005| 国产精品久久精品国产| 欧洲亚洲成av人片天堂网| 99热国产这里只有精品9| 中文字幕成人精品久久不卡| 57pao成人国产永久免费视频| 美乳丰满人妻无码视频| 阿巴嘎旗| 精品亚洲国产成人| 欧美成人精品三级网站| 西西444www高清大胆| 国产精品九九久久精品女同| 亚洲国产成人精品av区按摩| 久久久精品2019中文字幕之3| 久久精品人妻少妇一区二| 亚洲精品乱码久久久久红杏| 日韩av一区二区不卡在线| 中文字幕有码日韩精品| 吉首市| jk白丝喷浆| 人妻放荡乱h文| 人妻无码中文字幕| 日本不卡片一区二区三区|