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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

第九章存储过程

發布時間:2025/3/11 编程问答 44 豆豆
生活随笔 收集整理的這篇文章主要介紹了 第九章存储过程 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

第九章存儲過程

  • 9.1_游標的使用
    • 9.1.1_游標簡介及使用流程
    • 9.1.2_游標的聲明
    • 9.1.3_使用游標讀取數據
    • 9.1.4_舉例說明
  • 9.2_存儲過程
    • 9.2.1_存儲過程簡介
    • 9.2.2_存儲過程定義及執行
    • 9.2.3_重寫存儲過程
    • 9.2.6_刪除存儲過程
    • 9.2.5_舉例說明

9.1_游標的使用

9.1.1_游標簡介及使用流程

使用游標(CURSOR)在需要一行一行處理時,游標十分有用。游標可以打開一個結果集合(按照指定的標準選擇的行),并提供在結果集中一行一行處理的功能。基于游標的類型,可以對其進行回滾或者前進。

使用流程:
①定義
②通過Fetch讀取結果集中的數據
③打開游標

open cursor_name

④關閉游標

close cursor_name

9.1.2_游標的聲明

用DECLARE語句對游標進行聲明,有兩種方法可以指定一個游標。
SQL-92 語法:

DECLARE cursor_name [ INSENSITIVE ] [ SCROLL ] CURSOR FOR select_statement [ FOR { READ ONLY | UPDATE [ OF column_name [ ,...n ] ] } ] --舉例: DECLARE student_cursor CURSOR FOR SELECT sno,sname FROM student

Transact-SQL 擴展語法:

DECLARE cursor_name CURSOR [ LOCAL | GLOBAL ] [ FORWARD_ONLY | SCROLL ] [ STATIC | KEYSET | DYNAMIC | FAST_FORWARD ] [ READ_ONLY | SCROLL_LOCKS | OPTIMISTIC ] [ TYPE_WARNING ] FOR select_statement [ FOR UPDATE [ OF column_name [ ,...n ] ] ]

9.1.3_使用游標讀取數據

在從游標中讀取數據的過程中,可以在結果集中的每一行上來回移動和處理。
如果游標定義成了可滾動的(在聲明時使用SCROLL關鍵字),則任何時候都可取出結果集中的任意行
對于非滾動的游標,只能對當前行的下一行實施取操作。結果集可以取到局部變量中。Fetch命令的語法如下:

FETCH [NEXT | PRIOR| FIRST | LAST | ABSOLUTE {n | @nvar} | RELATIVE {n | @nvar}] FROM [GLOBAL] cursor_name} | cursor_variable_name} [INTO @variable_name ][,……n]]

當@@fetch_status != 0時,讀取結束

--舉例 FETCH NEXT FROM student_cursor INTO @ID, @Name

9.1.4_舉例說明

例程9.3:定義一個游標,返回學生信息表中所有的數據,打開游標,然后遍歷學生信息表,直到找到學生名稱為“張三豐”的記錄為止,并且打印學生學號和學生名稱。

--定義游標 DECLARE student_cursor CURSOR FOR SELECT sno,sname FROM student --定義變量 DECLARE @ID char(10), @Name char(30) --打開游標 OPEN student_cursor --指向集合的下一項 FETCH NEXT FROM student_cursor INTO @ID, @Name --進入whlie循環當全局變量@@fetch_status = 0時進入循環 WHILE @@fetch_status = 0 BEGIN IF @Name = '張三豐' BEGINPRINT '找到張三豐'PRINT @ID+@NameBREAK END --指向集合中下一項 FETCH NEXT FROM student_cursor INTO @ID, @Name END

9.2_存儲過程

9.2.1_存儲過程簡介

過程化SQL塊主要有兩種類型,即命名塊和匿名塊。之前介紹的是匿名塊。匿名塊每次執行時都要進行編譯,它不能被存儲到數據庫中,也不能在其他過程化SQL塊中調用。存儲過程和函數是命名塊,它們被編譯后保存在數據庫中,稱為持久性存儲模塊,可以被反復調用,運行速度較快。
(簡單來說,存儲過程可以像函數一樣被調用,并且可以將這個功能存到數據庫中,以后可以直接用)

存儲過程分為兩類:系統存儲過程和用戶自定義存儲過程;

9.2.2_存儲過程定義及執行

無輸出參數的存儲過程:

USE students--在student數據庫上建立存儲過程 GO CREATE PROCEDURE procedure_name @xbbh varchar(4)--procedure_name 存儲過程名,@xbbh varchar(4)傳入參數及參數類型 AS begin --sql過程塊 end --上述中procedure可以簡寫為proc

帶輸出參數的存儲過程:

USE students--在student數據庫上建立存儲過程 GO CTEATE PROCEDURE proc_testOutput ( @p1 int , @p2 int OUTPUT, --輸出參數@p3 int ) AS BEGIN --sql過程塊 END

通過TRANSACT-SQL語句的EXEC命令執行一個已定義的存儲過程語法格式:

USE studentsGOEXEC proc_nameGO

9.2.3_重寫存儲過程

USE students--在student數據庫上建立存儲過程 GO --把create改為alter即可 alter PROCEDURE procedure_name @xbbh varchar(4)--procedure_name 存儲過程名,@xbbh varchar(4)傳入參數及參數類型 AS begin --sql過程塊 end

9.2.6_刪除存儲過程

USE students GO DROP PROCEDURE proc_scorepass

9.2.5_舉例說明

補充:#name是臨時集合或臨時存儲過程

統計錄取新生最多的前幾所(數量查詢時給定)高中:(使用了存儲過程)

--定義游標 declare find_cursor cursor for select middle_school from Student group by middle_school order by COUNT(*) desc --存儲過程 use test go create procedure find_procedure @number int as begin --定義變量 declare @count int = 0 declare @school char(50) --打開游標 open find_cursor --讀取游標所指集合的下一項內容 fetch next from find_cursor into @school while @count < @number begin set @count = @count+1 print @count print @number print @school fetch next from find_cursor into @school end --關閉游標 close find_cursor end --調用存儲過程 exec find_procedure 5

總結

以上是生活随笔為你收集整理的第九章存储过程的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。