[SQL] Stored procedure (1)
Stroed procedure
- Stored procedure은 SQL 서버 안에 있는 트랜젝션 SQL문의 집합입니다.
- Stored procedure은 named object로 데이터베이스 서버에 저장됩니다.
- Procedures는 다른 프로그래밍 언어의 구문과 유사합니다.
> 인자를 받아서 여러 형태의 값들을 호출한 함수에 반환합니다.
> 데이터베이스에서 실행하는 프로그래밍 statement도 포함하고, 다른 procedure를 호출하는 statement도 포함합니다.
> 호출한 함수에 성공 또는 실패 여부를 반환합니다.(실패 이유를 반환하기도 합니다)
Stored Procedure를 사용하면 좋은 점
1. 서버/클라이언트 네트워크 트래픽 감소
- procedure의 명령은 하나의 batch로 실행됩니다.
- 실행할 procedure만 네트워크로부터 받기 때문에 서버와 클라이언트 사이의 네트워크 트래픽이 감소합니다.
- procedure로 캡슐화 되지 않은 코드들은 각각의 코드가 한 줄씩 네트워크에서 넘어와야 합니다.
2. 강력한 보안
- 많은 유저와 클라이언트 프로그램은 procedure를 통해 허가받지 않더라도 데이터베이스 객체에 연산을 사용할 수 있습니다.
- procedure은 어떤 과정과 기능들이 사용되는지 컨트롤하고 데이터베이스 객체들을 보호하는데, 이것은 각 객체
단위 의 허가를 하지 않아도 되게 하고, 이것은 보안 계층을 단순하게 합니다.
- 네트워크에서 procedure를 호출할 때 실행할 procedure만 볼 수 있고, 악의적인 사용자가 다른 중요한 데이터에
접근 하지 못하게 합니다.
- procedure 인자를 사용하는 것으로 SQL injection 공격을 방어하는데 도움이 됩니다.
- procedure은 암호화 할 수 있고, 소스 코드를 해독하기 어렵게 만듭니다.
3. 코드의 재사용
- 반복해야할 모든 데이터베이스의 연산들이 procedure에 캡슐화 되어있습니다.
- 같은 코드를 다시 쓸 필요가 없어지고, 코드의 불일치를 줄일 수 있습니다.
4. 쉬운 유지보수
5. 성능 향상
Stored Procedure의 종류
Temporay Stored Porcedure
- user-defind procedure의 형태이다
- 영구적인 procedure이라서, temp데이터베이스에 저장된다.
- local 과 global procedure로 나뉜다.
> local temporay procedure은 하나의 number sign(#)을 갖고,
Global temporary procedure은 두 개의 number sign(##)을 갖는다
System Stored Procedure
- SQL 서버에 포함되어 있다.
- 내부에 물리적으로 저장되어있다.
Extended User-Defined Stroed Procedure
- 확장된 procedure은 프로그래밍 언어의 external routine을 만들 수 있다.
User_Defined Stroed Procedure
- Resource database를 제외한 모든 시스템 데이터베이스와 user-defined database에서 생성될 수 있다.
System Procedure Examples
execute(= exec) : stored procedure를 실행할 때 사용한다.
sp_databases : 데이터베이스 테이블을 반환
sp_tables : 테이블 정보 테이블을 반환
sp_columns : 현재 환경의 객체들의 컬럼정보를 반환
sp_pkeys : 현재 환경에서 단일 테이블의 기본키 정보를 반환
sp_attach_db : 서버에 데이터베이스를 붙인다
sp_dettach_db : 서버에서 데이터베이스를 때어낸다.
sp_server_info : 서버의 정보를 제공한다.
sp_who : SQL 서버 데이터베이스 엔진의사용자, 세선, 프로세스 정보를 제공한다.