? ? ? ? ? ? ?
?
1、概念
SQL提供了將SQL語句嵌入到某種高級語言中的使用方式,通常采用預編譯的方法將SQL語句嵌入高級語言中。采用的方法由DBMS的預處理程序對源程序進行掃碼、識別出SQL語句,把它們轉換為主語言調用語句,這樣可以讓主語言編譯程序能識別它,最后由主語言的編譯程序將整個源程序編譯成目標碼。
2、SQL嵌入主語言涉及的幾個問題
區分主語言語句與SQL語句:通常在SQL語句前加前綴EXEC SQL,結束標志會跟著主語言不同而不同。
主語言工作單元與數據庫工作單元的通信機制
1、SQL通信區:向主語言傳遞SQL語句執行狀態信息,使主語言能夠根據此信息控制程序流程。
2、主變量:也成為共享變量。主語言向SQL語句提供參數主要通過主變量,主變量由主語言的程序定義,并用SQl的DECLARE語句說明。比如C語言中用法:
exec sql begin delcare p
char sno[4],cno[3]
int grade;
char sqlstate[7]
exec sql end declare p
根據共享變量givesno值查詢學生關系students 中的學生姓名、年齡、性別
exec sql select sname,age,sex
into :Msno,:Mcno;givensno
from studnets
where sno:Msno;
3、游標
SQl語言主要是面向集合的,一條SQL語句可產生或處理多條記錄。而主語言是面向記錄的,一組主變量一次只能放一條記錄,因此引入游標,通過移動游標指針來決定獲取那一條記錄。
3.1 定義游標:
exec sql declare<游標> cursor for <select 查詢語句>
endexec
3.2 打開游標
exec sql open <游標名> endexec
該語句執行游標定義中的select語句,同時游標處于活動狀況。游標是一個指針,此時指向查詢結構的第一行之前。
3.3 推進游標
exec sql fetch from <游標名> into <變量表> endexec
該語句使用時,游標推進一行,并把游標指向的行中的值取出來,送到共享變量中去。
3.4 關閉游標
exec sql close <游標名> endexec
3.5游標完整例子
---游標更新刪除當前數據
---1.聲明游標
declare orderNum_03_cursor cursor scroll
for select OrderId ,userId from bigorder where orderNum='ZEORD003402'
--2.打開游標
open orderNum_03_cursor
--3.聲明游標提取數據所要存放的變量
declare @OrderId int ,@userId varchar(15)
--4.定位游標到哪一行
fetch First from orderNum_03_cursor into @OrderId,@userId --into的變量數量必須與游標查詢結果集的列數相同
while @@fetch_status=0 --提取成功,進行下一條數據的提取操作 beginif @OrderId=122182beginUpdate bigorder Set UserId='123' Where Current of orderNum_03_cursor --修改當前行endif @OrderId=154074beginDelete bigorder Where Current of orderNum_03_cursor --刪除當前行endfetch next from orderNum_03_cursor into @OrderId ,@userId --移動游標end
IT技術分享社區
個人博客網站:https://programmerblog.xyz
文章推薦程序員效率:畫流程圖常用的工具程序員效率:整理常用的在線筆記軟件遠程辦公:常用的遠程協助軟件,你都知道嗎?51單片機程序下載、ISP及串口基礎知識硬件:斷路器、接觸器、繼電器基礎知識
?