프로그래밍/DB

[DB] MSSQL 프로시저 분기처리(continue,break,goto,return)

ss-pro 2023. 2. 27. 23:42
반응형

저장프로시저를 작성하다보면 처리중간에 반복문을 탈출하거나 지속처리, 프로시저 탈출등과 같이 분기처리를 해야되는 경우가 있는데 이 경우 아래 4가지를 사용하여 분기처리를 할 수 있습니다. 

1. Continue / Break문 
반복문내에서 반복문을 탈출하거나 지속처리할때 사용합니다. Continue는 반복문의 초기 위치로 이동 시킬 경우에 사용하고, Break는 반복문을 탈출시 사용합니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
declare @i int  
declare @count int
set @i =1;
print '3의배수는'
 
while (@i < 15)
begin 
    if (@i % 3 = 0)
    begin 
        print trim(str(@i))
        set @i = @i + 1;
       continue;           --continue문 while(@i <10)위치로 이동
    end 
    set @i = @i + 1;
end

1
2
3
4
5
6
7
8
9
10
11
12
13
14
declare @i int  
declare @count int
set @i =1;
print '3의배수는'
 
while (@i < 15)
begin 
    if (@i % 3 = 0)
    begin 
        break;            --조건이 맞을경우 while문을 탈출합니다            
    end 
    set @i = @i + 1;
end 
print '가장작은 3의배수 값은:' + trim(str(@i)) + '입니다'


2. Goto문
특정위치로 이동하는 경우 사용하며, 에러처리와 같이 예외처리시에 주로 사용합니다.  아래 예시를 보면 특정조건(if=5)인경우 goto jump_1으로 이동하라는 부분하여 처리 하는 부분을 확인 할 수 있습니다. jump_1, jump_2와 같이 두개의 분기가 있을 경우는 jump_1으로 이동시 해당시점 부터 순차적으로 처리되는 부분을 확인 할 수 있습니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
declare @i int  
set @i = 0 
while (@i < 100)
begin 
    if (@i = 5) goto jump_1
    if (@i = 6) goto jump_2
    set @i = @i + 1;
end
 
jump_1:
    print 'jump_1' 
    print @i
jump_2:
    print 'jump_2'
   print @i

쿼리결과
jump_1
5
jump_2
5

3. Return문
최근에는 특정 조건이 맞지 않는경우 ealry return을 사용하는 부분이 코드 가독성이 좋다고 하는 추세가 많습니다. 프로시저 작성시에 특정 조건이 맞거나? 맞지 않아서 해당시점에서 프로시저를 종료시키고 싶을 경우에 사용합니다. 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
declare @i int  
set @i = -1
while (@i < 100)
begin 
 
    if (@i < 0 ) 
    begin
        print '입력값에 이상이 있습니다'
        return
    end
    if (@i = 5) goto jump_1
    set @i = @i + 1;
end
 
jump_1:
    print 'jump_1' 
    print @i

처리결과 : 입력값에 이상이 있습니다
MSSQL에는 제공되는 continue,break,goto,return분기문을 사용해서 프로그램을 하시기 바랍니다. goto문 무조건 안좋다는 인식이 있기도 한데 해당부분을 적절하게 사용하면 보다 가독성 좋은 코드로 작성 가능합니다.