(1) 플레이어 ID와 비밀번호 얻기
select ID, Password from UserAccount where ID='Hong Gil Dong'
(2) 플레이어가 가진 캐릭터들의 이름 얻기
select Name from Character where OwnerUserAccoutID='Hong Gil Dong'
(3) 플레이어가 가진 캐릭터 하나에 대한 모든 정보(필드)를 얻기
select * from Character where ID='Little_Elf'
캐릭터가 몹 사냥 후 경험치를 획득하여 경험치 관련 레코드의 필드를 업데이트
update Character set Exp=2943 where Name="Little_Elf"
캐릭터가 아이템 3개 중 1개를 소모하여 2개가 남음
update Item set Amount=2 where ID=37485
캐릭터가 타입 34인 아이템을 3개 획득하여 Item 테이블에 새 레코드를 추가
insert into Item (ID, OwnerCharacterName, Type, Amount) values (37485, 'Little_Elf', 34, 3)
캐릭터가 아이템을 버리게 되어 아이템 레코드 삭제
delete from Item where ID=37485
게임 서버가 데이터베이스에 질의 구문을 자주 던지는 것은 비효율적이다.
극단적인 예를 들어보면,
for(i=0 to 100) {
select xxx from yyy whrer zzz=i
}
위의 경우 게임 서버는 DB에 select 구문을 100번 던져야 한다. 그러면 게임 서버와 데이터베이스 사이의 대화는 100회 오가게 된다. 단 한 번만 오가면 좋을 텐데 말이다.
DB는 질의 구문을 받으면 이를 처리할 수 있는 준비 작업 연산을 한다. 심지어 질의 구문을 받을 때마다 이러한 준비 작업 연산이 발생한다. DB 엔진은 받은 질의 구문을 분석하고 무슨 일을 해야 할지 계획한다. 이 과정이 매번 발생되는 것이 아니라 처음 한 번만 이 일을 하고 이후부터 생략하는 방법이 있다. 바로 저장 프로시저(SP)라는 기능이다.
데이터베이스 측에 미리 질의 구문 집합을 저장해 둘 수 있다. 이를 저장 프로시저라고 한다. 저장 프로시저는 데이터베이스 안에서 직접 실행되는 "스크립트 프로그램"이라고 할 수 있다.
데이터베이스에 저장한 저장 프로시저는 사용되기 전에 실행 계획 준비 작업이 완료된 상태로 보관된다.
이제 게임 서버는 질의 구문을 일일이 다 실행할 필요가 없다. 그저 저장 프로시저 자체를 실행하는 질의 구문만 실행하면 된다.
create procedure LoadCharacterAndItem
@Name nvarchar(50) -- 저장 프로시저의 입력 매개변수
as
begin -- 여기서부터 저장 프로시저 루틴의 시작
select * from Character where Name=@Name
select * from Item where OwnerCharacterName=@Name
end -- 루틴의 끝
저장 프로시저가 데이터베이스에 추가된 후 게임 서버에서는 저장 프로시저를 호출하는 질의 구문을 실행한다. 실행할 때는 다음과 같이 EXEC 다음에 저장 프로세저 이름과 매개변수를 나열하면 된다.
EXEC LoadCharacterAndItem @Name='xxx'
그러면 데이터베이스는 저장 프로시저 안에 있는 많은 구문을 알아서 다 실행한다.