日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Pro*c使用滚动游标进行更新或删除游标行

發(fā)布時間:2023/12/9 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Pro*c使用滚动游标进行更新或删除游标行 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

代碼:xx.pc

?

/* 功能:演示了Oracle滾動游標(biāo)進行更新(或刪除)操作定義游標(biāo)時注意事項: 1. DECLARE CURSOR語句必須是使用游標(biāo)的第一條語句 2. 游標(biāo)名稱是一個標(biāo)識符,而不是宿主變量,其長度是可以任意的,但只有前31個字符有效 3. 游標(biāo)所對應(yīng)的SELECT語句不能包含INTO子句 4. 游標(biāo)語句(DECLARE,OPEN,FETCH,CLOSE)必須在同一個預(yù)編譯單元內(nèi) */ #include <stdio.h> #include <string.h> #include <stdlib.h> #include <sqlca.h> #pragma comment(lib, "orasql10.lib")int connect(); void cursor(); void sql_error(); void main() { EXEC SQL WHENEVER SQLERROR DO sql_error(); // 安裝錯誤處理句柄 if(connect() == 0) { cursor(); EXEC SQL COMMIT RELEASE; // 提交事務(wù),斷開連接 } else printf("連接失敗\n"); } int connect() // connect to oracle database { char username[10], password[10], server[10]; strcpy(username, "scott"); strcpy(password, "scott"); strcpy(server, "orcl"); EXEC SQL CONNECT :username IDENTIFIED BY :password USING :server;if(sqlca.sqlcode == 0) return 0; else return sqlca.sqlcode; } void sql_error() // print error infomation { printf("%.*s\n", sqlca.sqlerrm.sqlerrml, sqlca.sqlerrm.sqlerrmc); } void cursor() // 游標(biāo)操作 { int eno; // 定義宿主變量 char name[10], action; float salary; EXEC SQL DECLARE emp_cursor SCROLL CURSOR FOR Select empno, ename, sal from emp FOR UPDATE; // 定義游標(biāo)用于更新(或刪除) EXEC SQL OPEN emp_cursor; // 打開游標(biāo) EXEC SQL WHENEVER NOT FOUND DO BREAK; // 游標(biāo)數(shù)據(jù)提取完畢后退出循環(huán) for(; ;) { printf("\nF: 第一行,P:前一行,N:下一行,L:最后一行\(zhòng)n"); printf("C: 當(dāng)前行,X:退出\n請輸入具體操作:"); scanf("%c", &action); fflush(stdin); switch(action) { case 'F': case 'f': EXEC SQL FETCH FIRST emp_cursor into :eno, :name, :salary; break; case 'P': case 'p': EXEC SQL FETCH PRIOR emp_cursor into :eno, :name, :salary; break; case 'N': case 'n': EXEC SQL FETCH NEXT emp_cursor into :eno, :name, :salary; break; case 'L': case 'l': EXEC SQL FETCH LAST emp_cursor into :eno, :name, :salary; break; case 'C': case 'c': EXEC SQL FETCH CURRENT emp_cursor into :eno, :name, :salary; break; case 'X': case 'x': EXEC SQL CLOSE emp_cursor; return; } if(salary < 2000){EXEC SQL UPDATE emp set comm=:salary*0.1 where CURRENT of emp_cursor; // 使用游標(biāo)更新當(dāng)前行printf("name: %s, 工資: %4.0f, 補助: %6.2f\n", name, salary, salary * 0.1);}elseprintf("name = %s(%d), salary = %4.0f\n", name, strlen(name), salary);} printf("sqlca.sqlerrd[2] = %d\n", sqlca.sqlerrd[2]); // sqlca.sqlerrd[2]存放著Select語句作用的行數(shù) }

總結(jié)

以上是生活随笔為你收集整理的Pro*c使用滚动游标进行更新或删除游标行的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。