儲存過程 事務 游標的使用

2021-10-07 23:08:30 字數 2306 閱讀 1009

語法結構

create procedure pro_name

-- 引數1 型別

-- ... ...

-- 引數n 型別 output --返回引數

as begin

--過程**

endgo

傳參,接收返回值方式

create procedure colo2

@iret int output -- 返回引數

asbegin

declare @var varchar(10)

set @var = 'a'

select @iret =

case when @var='a' then 0 -- case的多重使用

when @var='b' then 1

when @var='c' then 2

when @var='d' then 3

else -1

endendgo

declare @k int

exec colo2 @k output -- 執行儲存過程,並且用@k接受引數

select @k -- 檢視@k

drop procedure colo2 -- 刪除儲存過程

宣告變數、變數賦值、while的使用

-- 宣告變數

declare @變數1 型別

-- 變數賦值

set @變數1 = 值

--while

while 條件

begin

迴圈主主體

end-- 如何接受儲存過程中產生的表檢視

---定義部分 儲存過程中產生了乙個結果集

create procedure p_3

as select 1 as id,'xiaoli' as name

union

select 2 as id,'xiaowang' as name

select 3 id,'xiaozhang' name

union

select 4 id,'xiaozhao' name

--注意如果有兩次查詢,那麼這兩次查詢返回的資料表的結構必需是一樣的.

drop procedure p_3

--執行部分

declare @tab as table(

id int

,name nvarchar(20)

)insert into @tab(id,name)

execute p_3

select * from @tab

常用方法

set nocount on; --返回計數 影響行數 

set xact_abort on; --注意這裡一定要寫xact_abort為on 才能保持事務的特性

begintry

begin tran

--sql語句

commit tran

endtry

begincatch

if xact_state()=-1

rollback tran

endcatch

--定義游標

declare 游標名 cursor for

《選擇檢視》

--使用游標

open 游標名

fetch next from 游標名 into <@接收變數》

--注意,接收變數的個數要等於從游標中取出來的個數,並且變數型別同遊標值型別一致

--迴圈取值

while @@fetch_status=0

begin

--拿接收到的值進行需求操作

fetch next from 游標名 into <@接收變數》

endclose 游標名

deallocate 游標名

-- while迴圈取值時 常用到的函式有

--1. 判斷該游標資料id是否在目標表中存在? not exists()

if not exists(select * from table_name where tabel_name.id = @游標中接收的id變數)

begin

-- 進一步操作

end--2. 查詢滿足條件的記錄行數 count(1)

declare @i int

set @i = 0

select @i=count(1) from table_name

select @i

sql service 儲存過程,游標的使用

1 建表 drop table dbo.users gocreate table dbo.users id int not null name varchar 32 null go alter table dbo.users add primary key id go2 新增資料 刪除儲存過程 if...

mysql 儲存過程 游標的使用

儲存過程 create procedure changefrozen begin 定義變數 declare i int default 0 declare d int default 0 declare y id int declare y uid int declare y task id int...

oracle 儲存過程和游標的使用

1 編寫乙個函式,輸入員工編號將每位員工工作了多少年零多少月零多少天輸出來 如 年份 x 月份 xx 天數 xx create or replace procedure proc workofyear eno number iscursor curs workofyear is select ena...