表:student
列:student_id, name, age, ***,teacher_id
表:teacher
列:teacher_id,name,age,***,salary,student_num
需求:將性別和年齡符合給定條件的學生,都指派給指定的老師,並將學生的數量,更新到teacher表中。
業務成功,則返回學生的數量,否則返回-1。
儲存過程的**:
create procedure update_teacher_table
(@p_s_*** varchar(5),@p_age int,@p_t_id varchar(10),@p_result int output)as
begin
declare @adv_rowcount int
declare @adv_error int
declare @num int
select @num=count(student_id) from student where ***=@p_s_*** and age=@p_age
update teacher set student_num=@num where teacher_id=@p_t_id
select @adv_error = @@error, @adv_rowcount=@@rowcount
if @adv_error != 0 or @adv_rowcount = 0
begin
set @p_result = -1
endelse
begin
set @p_result =@num
endend
在資料庫中模擬測試儲存過程的**:
declare @p_result int
exec update_teacher_table '引數1', 引數2,'引數3',@p_result output
select @p_result
解釋:1:建立儲存過程的語法為:create procedure 儲存過程名字(輸入引數1[,輸入引數2...],輸出引數)
asbegin
主體**;
end所有的引數,不論是輸入引數還是輸出引數都必須以@p_開頭,輸出引數放在最後,後面用output標註。
2:所有的變數需要用declare來宣告,必須以@ 開頭。
3:declare @adv_rowcount int 和 declare @adv_error int 是宣告系統變數,分別代表執行sql後影響表的行數,和錯誤數量
4: select @adv_error = @@error, @adv_rowcount=@@rowcount 這句話緊跟在操作表的sql之後。
用來查詢前面的sql執行之後,出現錯誤的數量和影響的行數。
5:通過if else來判斷該執行什麼業務。if @adv_error != 0 or @adv_rowcount = 0 代表,有錯誤,或者影響的行數為0。
sybase 儲存過程 快取
最近系統公升級,修改了資料庫的表字段,結果出現了問題,試了很久才找到問題,但還是不知道具體的原因。問題如下 sybase資料庫表tcz,應為業務需要,需在表中加乙個自增字段操作如下 1 停止服務程式,不讓其往資料庫寫入資料。2 把原來的表名改為tcz old 3 新建表tcz,裡面增加id自增字段 ...
Sybase 儲存過程GROUP
版本1 if object id dbo.statistics for ang is not null drop procedure dbo.statistics for ang gocreate procedure statistics for ang begin time date as beg...
sybase儲存過程返回引數
drop procedure p get oclist with itemnumber go 定義輸入引數 orderno 輸出引數 oc list create procedure p get oclist with itemnumber orderno varchar 30 oc list va...