반응형
프로시저 수정후~!!!!!!! 만들어져서 저장되는시간이걸린다
그래서 수정후 바로 적용안되는 경우가 있다
만들고나서 10초정도 딜레이한 시간이 필요하다
USE pubs
USE pubs
CREATE PROC au_info
@lastname varchar(40),
@firstname varchar(20)
AS
SELECT a.au_lname, a.au_fname, t.title, p.pub_name
FROM authors AS a INNER JOIN titleauthor AS ta
ON a.au_id = ta.au_id INNER JOIN titles AS t
ON t.title_id = ta.title_id INNER JOIN publishers AS p
ON t.pub_id = p.pub_id
WHERE a.au_fname = @firstname
AND a.au_lname = @lastname
GO
-- 저장프로시셔 실행하고 내용확인하는방법
SELECT * FROM authors
EXEC au_info 'White','Johnson'
ALTER PROC au_info
@lastname varchar(40),
@firstname varchar(20)
AS
SELECT a.au_lname, a.au_fname, t.title, p.pub_name
FROM authors AS a INNER JOIN titleauthor AS ta
ON a.au_id = ta.au_id INNER JOIN titles AS t
ON t.title_id = ta.title_id INNER JOIN publishers AS p
ON t.pub_id = p.pub_id
WHERE a.au_fname = @firstname
AND a.au_lname = @lastname
GO
-- 저장프로시셔 실행하고 내용확인하는방법
SELECT * FROM authors
EXEC au_info 'White','Johnson'
CREATE PROC myCalc -- 프로시저 만들어
@val1 int = 0,
@val2 int = 0,
@result int OUTPUT -- 결과를 돌려받을때는 OUTPUT 으로 적는다
AS -- 출력 매개 변수 쓰는방법(OUTPUT)
SET @result = @val1 + @val2
GO
DECLARE @returnVal INT
EXEC MyCalc 123 , 321 , @returnVal OUTPUT -- OUTPUT은화면에 출력하는것이다
SELECT @returnVal -- PRINT @returnVal -- 출력 매개변수를 쓰는방법
WITH ENCRYPTION -- 암호화 됩니다 내용을 볼수가 없게되요
WITH RECOMPILE -- 다음에 실행할때도 최적화시킨다 -- 쓰면 좋다고 나와있다
--USE Pubs
--IF object_id('usp_JobsInsert') IS NOT NULL
-- DROP PROC msp_JobsInsert
--GO
CREATE PROC usp_JobsInsert -- 프로시저 생성
--@job_id smallint --> IDENTITY 열이므로 사용 불가
@job_desc varchar(50) = '불가능값' -- NOT NULL & DEFAULT(s)
, @min_lvl tinyint = 0 -- 크기가 125까지밖에 못넣는다
, @max_lvl tinyint = 0 -- 출력매개변수없다
AS
BEGIN TRAN
DECLARE @ERR int -- 에러났을떄 에러값(정수)을 담는 변수
DECLARE @ID smallint -- @@IDENTITY 결과값 담을 변수 선언
/* 인자들로 일단 행 삽입(생략된 인자들도 포함). */
INSERT INTO jobs (job_desc, min_lvl, max_lvl)
VALUES (@job_desc, @min_lvl, @max_lvl)
SET @ERR = @@ERROR -- @@ 골배잉 2개는 시스템변수( 에러값은 숫자)
IF @ERR <> 0 GOTO ERROR
SET @ID = @@IDENTITY -- 방금 사용된 IDENTITY 값을 보관
/* 해당 열 값들을 열의 기본값으로 수정함 */
IF @job_desc = '불가능값'
BEGIN
UPDATE jobs
SET job_desc = DEFAULT
WHERE job_id = @ID
SET @ERR = @@ERROR
IF @ERR <> 0 GOTO ERROR
END
COMMIT
RETURN @ID -- IDENTITY 값을 반환함
ERROR: -------GOTO ERROR
DECLARE @error_msg nvarchar(400)
SET @error_msg = dbo.sfn_MakeErrMsg('usp_JobsInsert', @ERR, DEFAULT)
RAISERROR( @error_msg, 16, 1 )
ROLLBACK
GO
프로시저 인서트문 INSERT
USE Pubs
IF object_id('usp_JobsInsert') IS NOT NULL
DROP PROC msp_JobsInsert
GO
CREATE PROC usp_JobsInsert -- 프로시저 생성
--@job_id smallint --> IDENTITY 열이므로 사용 불가
@job_desc varchar(50) = '불가능값' -- NOT NULL & DEFAULT(s)
, @min_lvl tinyint = 0 -- 크기가 255 까지밖에 못넣는다
, @max_lvl tinyint = 0 -- 출력매개변수없다
AS
BEGIN TRAN
DECLARE @ERR int -- 에러났을떄 에러값(정수)을 담는 변수
DECLARE @ID smallint -- @@IDENTITY 결과값 담을 변수 선언
/* 인자들로 일단 행 삽입(생략된 인자들도 포함). */
INSERT INTO jobs
(job_desc, min_lvl, max_lvl)
VALUES
(@job_desc, @min_lvl, @max_lvl)
SET @ERR = @@ERROR -- @@ 골배잉 2개는 시스템변수( 에러값은 숫자)
IF @ERR <> 0 GOTO ERROR
SET @ID = @@IDENTITY -- 방금 사용된 IDENTITY 값을 보관 -- 증가하는값
/* 해당 열 값들을 열의 기본값으로 수정함 */
IF @job_desc = '불가능값'
BEGIN -- c#의 IF() '{' <--를 의미
UPDATE jobs
SET job_desc = DEFAULT
WHERE job_id = @ID
SET @ERR = @@ERROR
IF @ERR <> 0 GOTO ERROR
END -- c#의 IF() '}' <--를 의미
COMMIT
RETURN @ID -- IDENTITY 값을 반환함
ERROR: -------GOTO ERROR
DECLARE @error_msg nvarchar(400)
SET @error_msg = dbo.sfn_MakeErrMsg('usp_JobsInsert', @ERR, DEFAULT)
-- sfn_MakeErrMsg의 함수를 에러메세지를 넣어서 실행
RAISERROR( @error_msg, 16, 1 )
ROLLBACK
GO
SELECT * FROM jobs
EXEC usp_jobsInsert DEFAULT ,100,200
'Database > MS-SQL' 카테고리의 다른 글
SELECT 문과 함수사용 (0) | 2008.10.17 |
---|---|
DB 사용자정의 함수기본 사용자정의함수 예제 (0) | 2008.10.16 |
DB 프로시저 묶기 INS(삽입), UPD(수정), DEL(삭제), SEL(전체), SEA(하나) (0) | 2008.10.16 |
저장 프로시저 수정문 삭제문 셀렉트문 (0) | 2008.10.16 |
저장프로시저 예제 (0) | 2008.10.14 |
쿼리 교도소 탈출하기 (0) | 2008.10.14 |
저장프로시저와 사용자 지정함수 사용예 (0) | 2008.10.14 |
데이터 베이스 LOCK(잠금) DEAD LOCK(교착상태) (0) | 2008.10.14 |