<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工具的源代碼,學習高技術含量的內容。

       上一節(jié)我們看到了插入數據的過程,這一節(jié)看一下怎樣更新和刪除數據庫表中的數據。其實在OCIINSERTUPDATEDELETE都叫做更新操作,就是通過SQL語句對數據庫表中的數據做出了更改。那么更新和刪除表數據,也遵循插入數據時同樣的步驟,我們列出來,再復習一遍。

      1. 分配一個SQL語句句柄,OCIHandleAlloc()

      2. 準備SQL語句,OCIStmtPrepare()

      3. SQL語句綁定要插入的數據,OCIBindByPos()

      4. 執(zhí)行SQL語句,OCIStmtExecute()

      5. 提交數據庫改變,OCITransCommit()

      用到的OCI函數的原型和參數已經在上一節(jié)中介紹過了,需要時可以回看一下。

      更新和刪除數據與插入數據的不同,僅在執(zhí)行的SQL語句文本不同而已。

      還以上一節(jié)中創(chuàng)建的表為例,在test_tab中已經插入了一條數據,現在把NAMEADDR字段的數據都更新成大寫,那么SQL語句為UPDATE test_tab SET NAME='AAAAAAAA', ADDR='BBBBBBBBBBBBBBBBBBBB' WHERE ID=1。刪除這條數據的SQL語句為DELETE FROM test_tab WHERE ID=1

      OCI中更新的SQL文本為UPDATE test_tab SET NAME=:1, ADDR=:2 WHERE ID=:3。刪除的SQL文本為DELETE FROM test_tab WHERE ID=:1

      不管是更新列表中的占位符還是WHERE條件中的占位符,都要通過綁定函數來與宿主變量建立聯系。下面還是通過實際的例子代碼來看一下完整的過程。

      更新數據源代碼。

       

      OCIEnv       *envhp = NULL;
      OCIError     *errhp = NULL;
      OCIServer    *svrhp = NULL;
      OCISession   *usrhp = NULL;
      OCISvcCtx    *svchp = NULL;
      OCIStmt      *smthp = NULL;
      
      /* 更新一條數據 */
      int update_one_row(void){
          sword    rc;
          int        slen;
          sb2        ind_id;
          sb2        ind_name;
          sb2        ind_addr;
          ub2        alen_id;
          ub2        alen_name;
          ub2        alen_addr;
          ub2        rcode_id;
          ub2        rcode_name;
          ub2        rcode_addr;
          int32_t    id;
          char    name[32];
          char    addr[256];
          OCIBind    *bndp;
          char    sqltxt[1024];
      
          /* 分配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, "UPDATE test_tab SET NAME=:1, ADDR=:2 WHERE ID=:3");
          slen = strlen(sqltxt);
      
          /* 準備語句 */
          if (check_oci_error(errhp,
              OCIStmtPrepare(smthp, errhp, (const OraText *)sqltxt, slen,
                  OCI_NTV_SYNTAX, OCI_DEFAULT)) < 0)
              return (-1);
      
          /* 綁定第一個占位符NAME */
          if (check_oci_error(errhp,
              OCIBindByPos((OCIStmt *)smthp,
                  (OCIBind **)&bndp,
                  errhp,
                  (ub4)1,             /* position */
                  (void *)name,       /* valuep */
                  (sb4)30,            /* value_sz */
                  (ub2)SQLT_STR,      /* dty */
                  (void *)&ind_name,  /* indp */
                  (ub2 *)&alen_name,  /* alenp */
                  (ub2 *)&rcode_name, /* column return code pointer */
                  (ub4)0,             /* maxarr_len */
                  (ub4 *)NULL,        /* curelep */
                  (ub4)OCI_DEFAULT)   /* mode */
              ) < 0)
              return (-1);
      
          /* 綁定第二個占位符ADDR */
          if (check_oci_error(errhp,
              OCIBindByPos((OCIStmt *)smthp,
                  (OCIBind **)&bndp,
                  errhp,
                  (ub4)2,             /* position */
                  (void *)addr,       /* valuep */
                  (sb4)200,           /* value_sz */
                  (ub2)SQLT_STR,      /* dty */
                  (void *)&ind_addr,  /* indp */
                  (ub2 *)&alen_addr,  /* alenp */
                  (ub2 *)&rcode_addr, /* column return code pointer */
                  (ub4)0,             /* maxarr_len */
                  (ub4 *)NULL,        /* curelep */
                  (ub4)OCI_DEFAULT)   /* mode */
              ) < 0)
              return (-1);
      
          /* 綁定第三個占位符ID */
          if (check_oci_error(errhp,
              OCIBindByPos((OCIStmt *)smthp,
                  (OCIBind **)&bndp,
                  errhp,
                  (ub4)3,                /* position */
                  (void *)&id,        /* valuep */
                  (sb4)4,             /* value_sz */
                  (ub2)SQLT_INT,      /* dty */
                  (void *)&ind_id,    /* indp */
                  (ub2 *)&alen_id,    /* alenp */
                  (ub2 *)&rcode_id,   /* column return code pointer */
                  (ub4)0,             /* maxarr_len */
                  (ub4 *)NULL,        /* curelep */
                  (ub4)OCI_DEFAULT)   /* mode */
              ) < 0)
              return (-1);
      
      
          /* 賦值綁定的變量數據 */
          strcpy(name, "AAAAAAAA");
          strcpy(addr, "BBBBBBBBBBBBBBBBBBBB");
          id = 1;
      
          /* 指示符賦值為0,輸入非NULL數據 */
          ind_name  = 0;
          ind_addr  = 0;
          ind_id    = 0;
      
          /* 賦值變量的真實數據長度 */
          alen_name = strlen(name) + 1;
          alen_addr = strlen(addr) + 1;
          alen_id   = 4;
      
          /* 執(zhí)行OCI語句 */
          if (check_oci_error(errhp,
              OCIStmtExecute(svchp,
                  smthp,              /* stmthp */
                  errhp,              /* errhp */
                  1,                  /* iters */
                  0,                  /* rowoff */
                  NULL,               /* snap_in */
                  NULL,               /* snap_out */
                  OCI_DEFAULT)        /* mode */
              ) < 0)
              return (-1);
      
          /* 提交改變的數據 */
          if (check_oci_error(errhp,
              OCITransCommit(svchp, errhp, OCI_DEFAULT)) < 0)
              return (-1);
      
          return (0);
      }

       

      刪除數據源代碼。

       

      OCIEnv        *envhp = NULL;
      OCIError      *errhp = NULL;
      OCIServer     *svrhp = NULL;
      OCISession    *usrhp = NULL;
      OCISvcCtx     *svchp = NULL;
      OCIStmt       *smthp = NULL;
      
      /* 刪除一條數據 */
      int delete_one_row(void){
          sword    rc;
          int        slen;
          sb2        ind_id;
          ub2        alen_id;
          ub2        rcode_id;
          int32_t    id;
          OCIBind    *bndp;
          char    sqltxt[1024];
      
          /* 分配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, "DELETE FROM test_tab WHERE ID=:1");
          slen = strlen(sqltxt);
      
          /* 準備語句 */
          if (check_oci_error(errhp,
              OCIStmtPrepare(smthp, errhp, (const OraText *)sqltxt, slen,
                  OCI_NTV_SYNTAX, OCI_DEFAULT)) < 0)
              return (-1);
      
          /* 綁定第一個占位符ID */
          if (check_oci_error(errhp,
              OCIBindByPos((OCIStmt *)smthp,
                  (OCIBind **)&bndp,
                  errhp,
                  (ub4)1,                /* position */
                  (void *)&id,        /* valuep */
                  (sb4)4,             /* value_sz */
                  (ub2)SQLT_INT,      /* dty */
                  (void *)&ind_id,    /* indp */
                  (ub2 *)&alen_id,    /* alenp */
                  (ub2 *)&rcode_id,   /* column return code pointer */
                  (ub4)0,             /* maxarr_len */
                  (ub4 *)NULL,        /* curelep */
                  (ub4)OCI_DEFAULT)   /* mode */
              ) < 0)
              return (-1);
      
          /* 賦值綁定的變量數據 */
          id = 1;
      
          /* 指示符賦值為0,輸入非NULL數據 */
          ind_id = 0;
      
          /* 賦值變量的真實數據長度 */
          alen_id = 4;
      
          /* 執(zhí)行OCI語句 */
          if (check_oci_error(errhp,
              OCIStmtExecute(svchp,
                  smthp,              /* stmthp */
                  errhp,              /* errhp */
                  1,                  /* iters */
                  0,                  /* rowoff */
                  NULL,               /* snap_in */
                  NULL,               /* snap_out */
                  OCI_DEFAULT)        /* mode */
              ) < 0)
              return (-1);
      
          /* 提交改變的數據 */
          if (check_oci_error(errhp,
              OCITransCommit(svchp, errhp, OCI_DEFAULT)) < 0)
              return (-1);
      
          return (0);
      }

       

       

       

       

      posted @ 2025-08-14 14:51  湯姆花花  閱讀(9)  評論(0)    收藏  舉報
      主站蜘蛛池模板: 久久国产国内精品国语对白| 最新偷拍一区二区三区| 国产精品蜜臀av在线一区| 亚洲激情一区二区三区在线| 国产99视频精品免费视频76| 94人妻少妇偷人精品| 午夜好爽好舒服免费视频| 国产成人亚洲综合图区| 中文字字幕在线中文乱码| 亚洲精品综合一区二区三区| 亚洲成av人片无码天堂下载 | 东方四虎在线观看av| 午夜福利国产一区二区三区| 天堂国产一区二区三区| 国产亚洲精品中文字幕| 国产AV无码专区亚洲AV漫画| 9久久伊人精品综合| 国产婷婷精品av在线| 国产亚洲一区二区三区四区| 中国女人和老外的毛片| 日韩精品不卡一区二区三区| 国产成人av电影在线观看第一页| 亚洲色精品vr一区区三区| 色欲av亚洲一区无码少妇| 日本一区不卡高清更新二区| 久久99精品国产自在现线小黄鸭| 亚洲国产欧美在线人成aaaa| 亚洲成人av在线系列| 吉隆县| 亚洲国产精品成人综合色在| 国产成人久久综合一区| 永久免费av网站可以直接看的| 久久av色欲av久久蜜桃网| 亚洲综合色成在线观看| 国产永久免费高清在线观看| 思思99热精品在线| 无码 人妻 在线 视频| 不卡国产一区二区三区| 国产午夜视频在线观看| 国产成人综合久久精品下载| 国产精品自在线拍国产手机版|