存储过程里的begin end

时间:2022-02-10 22:51:00
存储过程里的begin end 后面加分好和不加分好有没有区别

17 个解决方案

#1


是分号   打错了

#2


最好加上,试试不加的时候定义一些变量看看,写的复杂些。

#3


没什么区别 

#4


个人感觉没什么区别

#5


分号是良好的编程习惯,建议从现在开始启用这个习惯
部分语句,比如CTE要求前面语句有分号,这是趋势,以后可能会要求所有语句有分号。


#6


分号就没啥了。。。

#7


引用 2 楼 acherat 的回复:
最好加上,试试不加的时候定义一些变量看看,写的复杂些。


这个 是说 begin  end 。。

#8


引用 3 楼 fredrickhu 的回复:
没什么区别

没有么?我在我存储过程里end后面去掉了俩分号,然后游标后的while循环就不执行了

#9


良好的变成习惯告诉你,要加上begin end

#10


引用 8 楼 caolong0210 的回复:
引用 3 楼 fredrickhu 的回复:
没什么区别

没有么?我在我存储过程里end后面去掉了俩分号,然后游标后的while循环就不执行了


具体的语句。。

#11


应该是我错了,重启下服务就好了

#12


存储过程里的begin end

#13


引用 12 楼 acherat 的回复:

嘿嘿

#14


引用 12 楼 acherat 的回复:

亲爱的姐姐、为什么我游标里取出的最后一组值在循环里会执行两遍、前面几组值没问题,就是最后一组值会执行两遍

#15



CREATE  PROCEDURE pro_paper_auto_make(
@p_plan_id int,
@p_paper_id int,
@p_pool_id int,
@p_pool_id2 int,
@p_pool_id3 int,
@p_pool_id4 int,
@p_pool_id5 int,
@p_login_user_id varchar(32)
)
as
begin
--定义的变量不列出了
DECLARE  cur_plan_detail cursor for 
select 
c.question_no_b,c.point_per, c.difficult_y,c.difficult_z,c.difficult_n,c.type 
from t_test_plan a,t_test_paper_question_b c 
where  a.id = c.plan_id
and a.id = @p_plan_id
order by question_no_b 
;
open cur_plan_detail;
 fetch next from cur_plan_detail into @v_question_no_b,@v_point_per,@v_difficult_y,@v_difficult_z,@v_difficult_n,@v_question_type;

while(@@fetch_status=0)
begin
  fetch next from cur_plan_detail into @v_question_no_b,@v_point_per,@v_difficult_y,@v_difficult_z,@v_difficult_n,@v_question_type;
  if @@FETCH_STATUS <>0
  begin
  close cur_plan_detail
  end
--业务逻辑
end;

close cur_plan_detail;
deallocate cur_plan_detail;

end;

#16


没加过。。。

#17


以前在oracle写sql喜欢加分号, sql server 加分号有时候喜欢报错.

#1


是分号   打错了

#2


最好加上,试试不加的时候定义一些变量看看,写的复杂些。

#3


没什么区别 

#4


个人感觉没什么区别

#5


分号是良好的编程习惯,建议从现在开始启用这个习惯
部分语句,比如CTE要求前面语句有分号,这是趋势,以后可能会要求所有语句有分号。


#6


分号就没啥了。。。

#7


引用 2 楼 acherat 的回复:
最好加上,试试不加的时候定义一些变量看看,写的复杂些。


这个 是说 begin  end 。。

#8


引用 3 楼 fredrickhu 的回复:
没什么区别

没有么?我在我存储过程里end后面去掉了俩分号,然后游标后的while循环就不执行了

#9


良好的变成习惯告诉你,要加上begin end

#10


引用 8 楼 caolong0210 的回复:
引用 3 楼 fredrickhu 的回复:
没什么区别

没有么?我在我存储过程里end后面去掉了俩分号,然后游标后的while循环就不执行了


具体的语句。。

#11


应该是我错了,重启下服务就好了

#12


存储过程里的begin end

#13


引用 12 楼 acherat 的回复:

嘿嘿

#14


引用 12 楼 acherat 的回复:

亲爱的姐姐、为什么我游标里取出的最后一组值在循环里会执行两遍、前面几组值没问题,就是最后一组值会执行两遍

#15



CREATE  PROCEDURE pro_paper_auto_make(
@p_plan_id int,
@p_paper_id int,
@p_pool_id int,
@p_pool_id2 int,
@p_pool_id3 int,
@p_pool_id4 int,
@p_pool_id5 int,
@p_login_user_id varchar(32)
)
as
begin
--定义的变量不列出了
DECLARE  cur_plan_detail cursor for 
select 
c.question_no_b,c.point_per, c.difficult_y,c.difficult_z,c.difficult_n,c.type 
from t_test_plan a,t_test_paper_question_b c 
where  a.id = c.plan_id
and a.id = @p_plan_id
order by question_no_b 
;
open cur_plan_detail;
 fetch next from cur_plan_detail into @v_question_no_b,@v_point_per,@v_difficult_y,@v_difficult_z,@v_difficult_n,@v_question_type;

while(@@fetch_status=0)
begin
  fetch next from cur_plan_detail into @v_question_no_b,@v_point_per,@v_difficult_y,@v_difficult_z,@v_difficult_n,@v_question_type;
  if @@FETCH_STATUS <>0
  begin
  close cur_plan_detail
  end
--业务逻辑
end;

close cur_plan_detail;
deallocate cur_plan_detail;

end;

#16


没加过。。。

#17


以前在oracle写sql喜欢加分号, sql server 加分号有时候喜欢报错.