Comment 4
-
항해자™
2015.12.08 19:40
-
건우아빠
2015.12.09 10:29
(6. 이부분은 프로시저를 테스트하기 위한 곳인데 @RC OUTPUT의 의미하는 바를 모르겠습니다..)
- 프로시저에서 변수값을 별도로 받을수 있도록 지정하는 겁니다 .
단순 실패냐 성공이냐등의 값이 아닌 여러 값을 받을수가 있습니다.
return은 정수값만 처리 됩니다.
(1.resultcode라는 변수를 선언하고 기본값을 -1로 준거같은데 뒤에 OUTPUT의 의미하는게 뭔지 모르겠습니다.
위 6번과 같이 실재 프로시저에서 처리하기 위해 적용 해야 값을 받을수 있습니다.
= -1 은 default 처리를 한것입니다. null 값일때 기본 -1로 넣어라...
프로시저에는 output으로 기술 되어 있지만 6번에서 실행시 output를 기쇼ㅜㄹ 하지 않으면 값을 받지 못합니다.
(2.해당 No가 유효값인지 판단하기 위해 변수를 억지로 하나만들었는데 상당히 안좋아보이네요 ㅠ 보통은 어떤 방법을 많이쓰나요?)
변수에 존재 유무를 넣어 놓은듯 한데.. exists로 이용 가능 할듯 합니다.
이렇게도 많이 씁니다.
(3.16은 오류 레벨인걸로 알고 있는데 뒤에 1이 의미하는게 먼가용;)
RAISERROR 문을 help에서 찾아 보시면 될듯 한데.. 1부분은 에러 상태?
(4.그냥 RETURN만 했는데도 1값이 반환되던데 RETURN의 용도가 무엇인가요.)
exec @return = uspBoardNoDelete ...
retrun -1 하시면 @return 값이 -1로 넘어 옵니다.
이 프로시저는 return으로도 가능 할듯 합니다.
(5.이 부분은 위에 TRY에서 SQL문의 오류가 생기면 -1값을 반환하는 곳 같은데 어떤경우에 CATCH에 걸리나요.)
당연 BEGIN TRY ~ END TRY 안의 구문에서 문제가 발생하면
BEGIN CATCH ~ END CATCH 으로 넘어 옵니다...
output 문을 ERROR_MESSAGE() 값을 받는 구문을 추가 하시면 에러 상황을 자세히 알수 있습니다.
-
sincie
2015.12.09 10:50
꼼꼼한 답변 감사합니다
마지막으로 하나만 더 물어봐도될까요 ㅠ
맨위 6번 테스트에서 @RC는 아무 의미가 없는거죠?
@resultCode로 수정해야 오류검출이 될거같은데..
-
건우아빠
2015.12.09 10:53
의미가 없는건 아니구요..
@RC로 에러 값을 리턴하고 있고 추가로 에러 내용을 추가 하시면 더좋을듯 합니다.
output 으로 선언하면 말 그대로 값을 변수로 전달 할 수 있습니다.
아래처럼 하는 것이 더 좋을 수 있습니다.
if not exists (select 1 from dbo.tblBoard where no = @no)
begin
...
end
return 을 만나면 프로시저가 종료됩니다.
return만 적었는데 1을 받았다면 기본값 일수 있습니다.
try 블럭에서 오류가 발생하면 catch 블럭으로 이동하게 됩니다.