1. 변수
변수는 다른 프로그래밍 언어에서 사용하는 변수와 개념이 같으며 선언부에서 변수 선언을 하고 실행부에서 사용한다. 변수 선언 방식은 다음과 같다.
기본구문
변수 선언과 동시에 초깃값을 할당할 수 있는데, 초깃값을 할당하지 않으면 데이터 타입에 상관없이 그 변수의 초깃값은 NULL이 된다. 물론 선언부에서는 선언만 하고 실행부에서 초깃값을 할당하기도 한다.
변수로 선언할 수 있는 데이터 타입은 크게 두 가지로 구분할 수 있는데, 하나는 SQL 데이터 타입이고 다른 하나는 PL/SQL 데이터 타입이다. PL/SQL 데이터 타입인 BOOLEAN, PLS_INTEGER, BINARY_INTEGER 등이 있다.
2. 상수
상수는 변수와는 달리 한 번 값을 할당하면 변하지 않는다. 상수 선언도 변수 선언과 비슷하다.
상수를 선언할 때는 반드시 CONSTANT란 키워드를 붙여 변수와 구분하며 선언할 때 반드시 초기화해야 한다. 실행부에서 상수를 다른 값으로 변경할 수 없다. 상수는 특정 값을 할당해 놓고 실행부에서 사용하고자 할 때 사용된다.
예를 들어, 2.01이란 특정 변환 값이 있다. 실행부에서 이 값을 곱해서 연산을 하는 부분이 많은데 만약 이 값이 3.01로 변경이 됐다면 코드 전체를 훑어 2.01을 3.01로 수정한 뒤 다시 컴파일해야 한다. 이 값을 100번 사용했다면 100번 수정해야 한다는 뜻이다. 하지만 이 값을 상수로 만들면, 값이 바뀌더라도 선언부에서 한 번만 바꾸면 된다.
3. 연산자
PL/SQL 블록에서는 모든 SQL 연산자를 사용할 수 있으며, 연산자 우선순위는 다음과 같다.
우선순위가 가장 높은 ‘**’ 연산자는 제곱 연산자를 뜻하는데 PL/SQL에서만 사용할 수 있다. 예를 들어, 2**3는 2의 3제곱을 뜻한다.
◈ 예제
2**2*3**2에서 ‘**’ 연산자가 우선순위가 있으므로, 풀어 쓰면 (2^2^*3^2^) = (4*9) = 36이 된 것이다.
4. 주석
PL/SQL뿐만 아니라 SQL 구문에서도 주석을 사용할 수 있다. 한 줄 전체를 주석 처리할 때는 맨 앞에 ‘–’를 명시하고, 여러 줄의 코드에 주석을 붙일 때는 주석 처리할 부분의 처음과 끝에 ‘/*’와 ‘*/’를 붙인다.
5. DML문
PL/SQL 블록 상에서 사용하는 변수, 상수, 연산자는 사실 부차적인 용도로 사용될 뿐이다. 실제로 PL/SQL 블록을 작성하는 원래의 목적은 테이블 상에 있는 데이터를 이리저리 가공해서 특정 로직에 따라 무언가를 처리하는 것이며, 따라서 주로 사용되는 것은 SQL문이다. SQL문 중 DDL은 PL/SQL 상에서 직접 쓸 수 없고 DML문만 사용한다.
예를 들어, 사원 테이블에서 특정 사원의 이름과 부서명을 가져와 출력하는 코드를 작성한다고 해 보자.
◈ 예제
vs_emp_name와 vs_dep_name라는 두 개의 변수를 선언한 뒤, 사원 테이블에서 사번이 100인 사원의 이름과 부서명을 가져와 변수에 할당한 뒤 출력하였다. 테이블에 있는 데이터를 선택해 변수에 할당할 때는 SELECT 문에서 INTO절을 사용한다는 점이다. 이때 선택하는 컬럼에 따라 변수의 순서, 개수, 데이터 타입을 반드시 맞춰 줘야 한다.
또한 사원 테이블의 사원명과 부서명 타입을 동일하게 맞춰서 변수를 선언했는데 변수의 개수가 많아지면 해당 컬럼에 대응되는 변수 타입을 일일이 찾기가 번거로울 수 있다. 이럴 때는 다음과 같이 %TYPE 키워드를 쓰면 해당 변수에 컬럼 타입을 자동으로 가져온다.
'SQL' 카테고리의 다른 글
[SQL 23] PL/SQL 제어문 (FOR 문, CONTINUE문, NULL문) (0) | 2020.06.10 |
---|---|
[SQL 22] PL/SQL 제어문 (IF 문, CASE 문, LOOP 문, WHILE 문) (0) | 2020.06.10 |
[SQL 20] 서브쿼리 , 인라인뷰 (0) | 2020.06.09 |
[SQL 19] ANSI 조인 (내부 조인, 외부 조인, CROSS 조인) (0) | 2020.06.09 |
[SQL 18] 내부 조인 과 외부 조인 (셀프조인, 외부조인, 카타시안조인) (0) | 2020.06.08 |