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

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

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

      OCI編程高級(jí)篇(十四) 直接路徑裝載設(shè)置字段信息

      訪問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)容。

      接著上一節(jié)的內(nèi)容,直接路徑裝載我們從邏輯上應(yīng)該知道要做哪些事情,在OCI插入數(shù)據(jù)的時(shí)候我們看到很簡單,準(zhǔn)備OCI語句,綁定數(shù)據(jù),執(zhí)行插入操作就可以了,但是在直接路徑裝載中卻要設(shè)置這么多信息,其實(shí)在OCI插入數(shù)據(jù)時(shí),這些信息是隱藏在了SQL語句中,比如INSERT INTO scott.test_tab (ID, NAME, ADDR) values (:1, :2, :3),這里面就包含了表名稱,表的屬主,字段的名稱和字段的位置,這些信息在SQL語句語法分析時(shí)就會(huì)解析出來,然后在綁定操作中設(shè)置了數(shù)據(jù)類型,數(shù)據(jù)最大長度,數(shù)據(jù)值,數(shù)據(jù)實(shí)際長度。但是在直接路徑裝載時(shí)沒有SQL語句,所以這些信息要一步一步來設(shè)置,先看看怎樣設(shè)置字段名稱,數(shù)據(jù)類型,最大長度等信息。

      在設(shè)置字段信息之前,按照常理應(yīng)該有一個(gè)跟字段關(guān)聯(lián)的東西,在這里叫做字段描述符,一般情況下需要通過OCIDescriptorAlloc()函數(shù)來分配,但在直接路徑操作中它是作為一個(gè)參數(shù)獲得的,那么從哪里獲得這個(gè)參數(shù)呢,在直接路徑上下文句柄中有一個(gè)屬性叫做字段列表,從這個(gè)字段列表中得到字段描述符。再來按正常順序梳理一遍,從直接路徑上下文句柄OCIDirPathCtx中得到屬性字段列表(OCI_ATTR_LIST_COLUMNS),然后從字段列表中按照字段ID得到參數(shù)字段描述符,然后通過字段描述符設(shè)置各個(gè)字段的信息。

      這里用到一個(gè)函數(shù)叫做OCIParamGet(),看一下它的原型和參數(shù)。

      sword OCIParamGet ( const void *hndlp,
          ub4          htype,
          OCIError *errhp,
          void         **parmdpp,
          ub4          pos );

      hndlp是一個(gè)輸入?yún)?shù),是一個(gè)描述符句柄,函數(shù)從這個(gè)句柄得到參數(shù)。

      htype是一個(gè)輸入?yún)?shù),是上面描述符句柄的類型,這里是OCI_DTYPE_PARAM,代表一個(gè)描述符句柄。

      errhp是一個(gè)輸入/輸出參數(shù),錯(cuò)誤句柄,返回錯(cuò)誤碼和錯(cuò)誤信息文本。

      parmdpp是一個(gè)輸出參數(shù),返回一個(gè)特定位置的描述符句柄。

      pos是一個(gè)輸入?yún)?shù),描述符句柄的位置,從1開始計(jì)算。

      下面我們看看真實(shí)的設(shè)置字段信息的代碼。

       

      OCIEnv       *envhp = NULL;
      OCIError     *errhp = NULL;
      OCIServer    *svrhp = NULL;
      OCISession   *usrhp = NULL;
      OCISvcCtx    *svchp = NULL;
      struct dp_columns { ub4 dtyp; /* 字段類型 */ ub4 clen; /* 字段最大長度 */ char name[32]; /* 字段名稱 */ }; int dp_load(void){ int i; ub4 buf_sz; ub4 ncol; OCIDirPathCtx *dpctx; OCIDirPathColArray *dpca; OCIDirPathStream *dpstr; OCIParam *colLst = NULL; OCIParam *colDsc = NULL; struct dp_columms col[3]; /* 前面的代碼略過去,下面是設(shè)置字段信息的代碼部分 */ /* 獲得字段列表參數(shù) */ if (check_oci_error(errhp, OCIAttrGet((void *)dpctx, (ub4)OCI_HTYPE_DIRPATH_CTX, (void *)&colLst, (ub4)0, (ub4)OCI_ATTR_LIST_COLUMNS, errhp) ) < 0) return (-1); /* 為了方便設(shè)置,我們定義一個(gè)結(jié)構(gòu)存儲(chǔ)字段信息 */ col[0].dtyp = SQLT_INT; col[0].clen = 8; strcpy(col[0].name, "ID"); col[1].dtyp = SQLT_CHR; col[1].clen = 30; strcpy(col[1].name, "NAME"); col[2].dtyp = SQLT_CHR; col[2].clen = 200; strcpy(col[2].name, "ADDR"); for (i=0; i<ncol; i++) { /* 獲取字段描述符,這個(gè)描述符是隱式獲得,需要釋放,否則會(huì)造成內(nèi)存泄露 */ if (check_oci_error(errhp, OCIParamGet((const void *)colLst, (ub4)OCI_DTYPE_PARAM, errhp, (void **)&colDsc, (ub4)(i+1)) ) < 0) return (-1); /* 設(shè)置字段的屬性,字段名稱 */ if (check_oci_error(errhp, OCIAttrSet((void *)colDsc, (ub4)OCI_DTYPE_PARAM, (void *)col[i].name, (ub4)strlen(col[i].name), (ub4)OCI_ATTR_NAME, errhp) ) < 0) return (-1); /* 設(shè)置字段數(shù)據(jù)類型 */ if (check_oci_error(errhp, OCIAttrSet((void *)colDsc, (ub4)OCI_DTYPE_PARAM, (void *)&col[i].dtyp, (ub4)0, (ub4)OCI_ATTR_DATA_TYPE, errhp) ) < 0) return (-1); /* 設(shè)置字段的數(shù)據(jù)最大長度 */ if (check_oci_error(errhp, OCIAttrSet((void *)colDsc, (ub4)OCI_DTYPE_PARAM, (void *)&col[i].clen, (ub4)0, (ub4)OCI_ATTR_DATA_SIZE, errhp) ) < 0) return (-1); /* 在這里要釋放掉字段描述符,否則下一循環(huán)獲取描述符時(shí), * 這個(gè)描述符指向的內(nèi)存就會(huì)被掩蓋掉,造成內(nèi)存泄露 */ OCIDescriptorFree((void *)colDsc, (ub4)OCI_DTYPE_PARAM); } /* 設(shè)置完所有字段后,要把字段列表的描述符也釋放掉 */ OCIDescriptorFree((void *)colLst, (ub4)OCI_DTYPE_PARAM); /* 到這里,字段信息就設(shè)置完了,后面需要設(shè)置字段的輸入值了,下一節(jié)繼續(xù) */ return (0); }

       

      posted @ 2025-08-14 21:48  湯姆花花  閱讀(6)  評(píng)論(0)    收藏  舉報(bào)
      主站蜘蛛池模板: 久久影院九九被窝爽爽| 在线观看国产精品日韩av| 国产精品乱码一区二区三| 男女裸体影院高潮| 国产视频深夜在线观看| 免费午夜无码片在线观看影院| 99在线精品国自产拍中文字幕| av老司机亚洲精品天堂| 亚洲av永久无码精品成人| 日韩精品亚洲国产成人av| 裸身美女无遮挡永久免费视频| 久久精品久久精品久久精品| 亚洲日本精品一区二区| 国产成人综合色就色综合| 亚洲欧美综合精品成| 黄频在线播放观看免费| 伊人久久大香线蕉网av| 草裙社区精品视频播放| 一区二区三区四区亚洲综合| 高清有码国产一区二区| 久久午夜色播影院| 国内极度色诱视频网站| 人人爽人人爽人人片a免费| 欧美videosdesexo吹潮| 亚洲国产成人极品综合| 人妻内射一区二区在线视频| 日韩人妻无码精品久久| 免费AV片在线观看网址| 馆陶县| 99久久国产精品无码| 熟女系列丰满熟妇AV| 国产人妻久久精品一区二区三区| 色老头在线一区二区三区| 日本熟妇XXXX潮喷视频| 日本亚洲一区二区精品| 亚洲熟女乱色综一区二区| 又大又粗又爽18禁免费看| 视频一区二区三区四区五区| 久久精品久久电影免费理论片| 国产精品普通话国语对白露脸| 日韩精品人妻黄色一级片|