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

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

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

      OCI編程基礎(chǔ)篇(二) 創(chuàng)建環(huán)境、分配句柄

      訪問(wèn)www.tomcoding.com網(wǎng)站,學(xué)習(xí)Oracle內(nèi)部數(shù)據(jù)結(jié)構(gòu),詳細(xì)文檔說(shuō)明,下載Oracle的exp/imp,DUL,logminer,ASM工具的源代碼,學(xué)習(xí)高技術(shù)含量的內(nèi)容。

      創(chuàng)建OCI環(huán)境

      在編寫(xiě)OCI程序的第一步就是創(chuàng)建OCI環(huán)境,然后分配需要的句柄,下面介紹創(chuàng)建OCI環(huán)境的函數(shù)。這是OCI程序第一個(gè)要調(diào)用的函數(shù),名字叫做OCIEnvCreate()。看一下它的函數(shù)原型和參數(shù)。

      sword OCIEnvCreate ( OCIEnv **envhpp,
          ub4           mode,
          const void *ctxp,
          const void *(*malocfp)(void *ctxp, size_t size),
          const void *(*ralocfp)(void *ctxp, void *memptr, size_t newsize),
          const void (*mfreefp)(void *ctxp, void *memptr)
          size_t        xtramemsz,
          void           **usrmempp );

      envhpp是一個(gè)輸出參數(shù),是一個(gè)指針的指針,為了要把創(chuàng)建的環(huán)境句柄帶回來(lái)。后面的函數(shù)會(huì)用到這個(gè)句柄。

      mode是一個(gè)輸入?yún)?shù),指示創(chuàng)建OCI環(huán)境的模式。有幾個(gè)主要的模式介紹一下,一般用到的是缺省模式OCI_DEFAULT,大部分程序用這個(gè)模式就夠了。如果使用多線程調(diào)用OCI函數(shù),那么就要用到線程模式OCI_THREADED,這樣可以保證每個(gè)線程都有一份環(huán)境內(nèi)存,不相互干擾,否則線程之間互相修改共享的環(huán)境內(nèi)存,會(huì)造成coredump。如果使用OCI中的對(duì)象操作函數(shù),就要用到OCI_OBJECT模式。

      ctxp是一個(gè)輸入?yún)?shù),指示用戶定義的上下文指針,給回調(diào)函數(shù)用的,一般賦值為NULL就可以了。

      malocfp是一個(gè)輸入?yún)?shù),是一個(gè)函數(shù)指針,是用戶定義的分配內(nèi)存的函數(shù),類似C語(yǔ)言中的malloc()函數(shù),一般賦值為NULL

      ralocfp是一個(gè)輸入?yún)?shù),是一個(gè)函數(shù)指針,是用戶定義的再分配內(nèi)存的函數(shù),類似C語(yǔ)言中的realloc()函數(shù),一般賦值為NULL

      mfreefp是一個(gè)輸入?yún)?shù),是一個(gè)函數(shù)指針,是用戶定義的釋放內(nèi)存的函數(shù),類似C語(yǔ)言中的free()函數(shù),一般賦值為NULL。由于創(chuàng)建OCI環(huán)境變量需要分配一定大小的內(nèi)存,分配過(guò)程中就會(huì)用到內(nèi)存分配函數(shù),上面的三個(gè)函數(shù)指針就是為分配內(nèi)存和釋放內(nèi)存準(zhǔn)備的,讓用戶可以自己分配和釋放內(nèi)存,如果沒(méi)有用戶自己定義的函數(shù),那么都賦值為NULL,創(chuàng)建OCI環(huán)境時(shí)就使用系統(tǒng)自己的分配和釋放內(nèi)存的函數(shù)。

      xtramemsz是一個(gè)輸入?yún)?shù),指示額外分配內(nèi)存的大小,這個(gè)內(nèi)存可以給用戶使用,生命周期與OCI環(huán)境的生存期一樣長(zhǎng),在釋放環(huán)境內(nèi)存時(shí)才一起釋放掉。一般不用這個(gè)內(nèi)存,可以賦值為0

      usrmempp是一個(gè)輸出參數(shù),帶回分配的用戶內(nèi)存的指針。這個(gè)參數(shù)與上一個(gè)參數(shù)是相關(guān)的,如果上一個(gè)參數(shù)大于0,那么必須賦值把分配的用戶內(nèi)存指針帶回來(lái),如果上個(gè)參數(shù)為0,這里賦值為NULL就可以了。

      OCIEnvNlsCreate()的返回值是一個(gè)sword類型的整數(shù),實(shí)際上就是一個(gè)有符號(hào)的整數(shù)。所有的OCI函數(shù)返回值都是sword整數(shù),絕大多數(shù)的時(shí)候返回值是OCI_SUCCESSOCI_ERROR,表示函數(shù)執(zhí)行成功或出錯(cuò),特定的函數(shù)還會(huì)返回其他值,后面遇到時(shí)再介紹。

      看一個(gè)實(shí)際的例子。

      OCIEnv    *envhp = NULL;

      sword       rc;

      rc = OCIEnvCreate(
              &envhp,                        /* envhpp */
              OCI_DEFAULT,            /* mode */
              (void *)NULL,               /* ctxp */
              NULL,
              NULL,
              NULL,
              (size_t)0,
              (void **)NULL
      );

      if (rc != OCI_SUCCESS) {
              fprintf(stderr, "OCIEnvCreate() - allocate OCI env handle error !\n");
              return (-1);
      }

      這里返回的envhp就是創(chuàng)建的OCI環(huán)境變量指針。

      分配句柄

      創(chuàng)建完OCI環(huán)境之后,馬上就要分配必須的句柄才能連接到數(shù)據(jù)庫(kù),分配句柄的函數(shù)叫做OCIHandleAlloc()。看一下它的原型和參數(shù)。

      sword OCIHandleAlloc ( const void *parenth,
          void   **hndlpp,
          ub4    type,
          size_t xtramem_sz,
          void   **usrmempp );

      parenth是一個(gè)輸入?yún)?shù),表示被分配句柄的父句柄指針,一般會(huì)是OCI環(huán)境句柄。

      hndlpp是一個(gè)輸出參數(shù),帶回被分配的句柄指針。

      type是一個(gè)輸入?yún)?shù),指示分配句柄的類型。句柄類型有很多,在后面用到時(shí)再一一介紹。

      xtramem_sz是輸入?yún)?shù),指示額外分配的跟句柄關(guān)聯(lián)的用戶內(nèi)存大小,與創(chuàng)建OCI環(huán)境函數(shù)的最后兩個(gè)參數(shù)意義相同。不想分配的話賦值為0

      usrmempp是輸出參數(shù),帶回分配的用戶內(nèi)存的指針。

      一個(gè)實(shí)際的例子,在創(chuàng)建OCI環(huán)境后,第一個(gè)要分配的句柄就是處理錯(cuò)誤的句柄,類型為OCI_HTYPE_ERROR,我們來(lái)看一下。

      sword       rc;

      rc = OCIHandleAlloc(
              (const void *)envhp,
              (void **)&errhp,
              OCI_HTYPE_ERROR,
              0,
              (void **)NULL
      );

      if (rc != OCI_SUCCESS) {
              fprintf(stderr, "OCIHandleAlloc() - allocate OCI error handle error !\n");
              return (-1);
      }

      下一節(jié)我們?cè)賮?lái)看看還要分配哪些句柄,怎樣連接到數(shù)據(jù)庫(kù)。

      posted @ 2025-08-13 20:51  湯姆花花  閱讀(17)  評(píng)論(0)    收藏  舉報(bào)
      主站蜘蛛池模板: 性做久久久久久久| 青青草国产自产一区二区| 波多野结衣一区二区免费视频| 热久久美女精品天天吊色| 中文字幕无码不卡免费视频| 国内自拍视频在线一区| 亚洲精品乱码久久久久久中文字幕| xxxxbbbb欧美残疾人| 日产无人区一线二码三码2021| 亚洲av无码精品色午夜蛋壳| 一区二区三区四区精品视频| 国产午夜A理论毛片| 亚洲国产欧美日韩欧美特级| 最新亚洲人成网站在线影院| 延长县| 极品少妇无套内射视频| 国产盗摄xxxx视频xxxx| 欧美 变态 另类 人妖| 亚洲av免费成人精品区| 亚洲av无码成人精品区一区| 国产女人被狂躁到高潮小说| 特黄做受又粗又大又硬老头| 国产揄拍国产精品| 济宁市| 成人午夜免费无码视频在线观看| 另类国产精品一区二区| 国产精品视频亚洲二区| 久久国产精品老人性| 制服jk白丝h无内视频网站| 亚洲精品免费一二三区| 国产精品最新免费视频| 女人与公狍交酡女免费| 人妻精品动漫h无码| 日韩精品一卡二卡在线观看 | 无码伊人66久久大杳蕉网站谷歌 | 国产精品人伦一区二区三| 狠狠躁夜夜躁人人爽天天bl| 熟妇的奶头又大又长奶水视频| 国产真人做受视频在线观看| 国产精品人成视频免费播放| 国产一区二区不卡精品视频|