DATABASE(oracleDB 11g)/PLSQL

[PL/SQL]변수선언의 기초

SEUNGSAMI 2019. 2. 18. 12:14

변수선언의 기초



변수는 데이터의 임시 저장 영역 혹은 저장된 값을 조작하거나 재사용할때 사용한다.


변수 이름을 정할때는 다음의 조건을 따른다

- 문자로 시작

- 중간에 숫자 표함 가능

- 특수 문자 포함 가능

- 30자 이하

- 예약어 포함 X


변수를 선언하는 구문은 다음과 같다.

1
2
identifier [CONSTANT] datatype [NOT NULL]
    [:= |DEFAULT expr];
cs


구문

설명

identifier

변수이름

CONSTANT

변수의 제약조건(상수)

data type

변수의 데이터 타입 

NOT NULL

변수의 제약조건(NOT NULL)

expr

임의의 PL/SQL식



다음은 변수를 선언하는 예시이다.

1
2
3
4
5
DECLARE
  V_HIREDATE    DATE;
  V_DEPTNO      NUMBER(3NOT NULL :=10;
  V_LOCATION    VARCHAR2(13) := 'Atlanta';
  C_COMM        CONSTANT NUMBER := 1400;
cs

NOT NULL과 CONSTANT의 경우 변수 선언시 초기값을 정해주지 않는다면 ERROR가 발생된다.



다음 예시를 참고하자.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
SET SERVEROUTPUT ON
 
DECLARE
 V_ENAME    VARCHAR2(10);
 
BEGIN
  DBMS_OUTPUT.PUT_LINE('7788:'||V_ENAME); --7788:
  
  V_ENAME := 'XYZ';
  DBMS_OUTPUT.PUT_LINE('7788:'||V_ENAME); --7788:XYZ
  
  SELECT ENAME INTO V_ENAME
  FROM EMP
  WHERE EMPNO =7788;
    
  DBMS_OUTPUT.PUT_LINE('7788:'||V_ENAME); --7788:SCOTT 
END;
/
cs

DECLARE을 쓰고 변수 선언을 한다.

예시에 나와있는 상황에 따른 출력 결과를 확인하도록 하자.



PL/SQL의 변수는 다음과 같다

- 스칼라 : 단일 값, 위의 예시의 변수선언이 스칼라 변수 선언이다.

- 참조 : 포인터

- LOB(대형객체)

- 조합


비PL/SQL 변수

- 바인드 변수이다.

- 호스트 환경에서 생성되며, 호스트 변수라고도한다.

- PL/SQL 블록뿐만 아니라 SQL문에서도 사용가능하다.


다음과 같은 방법으로도 바인드 변수선언이 가능하다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
SET SERVEROUTPUT ON
 
VARIABLE B_ENAME VARCHAR2(10)
PRINT B_ENAME --''
EXECUTE :B_ENAME := 'ABC';
PRINT B_ENAME -- ABC
 
BEGIN
  
  SELECT ENAME INTO :B_ENAME
  FROM EMP
  WHERE EMPNO =7788;
    
  DBMS_OUTPUT.PUT_LINE('7788:'||:B_ENAME); --7788:SCOTT 
END;
/
 
PRINT B_ENAME --SCOTT
 
cs

이 경우 프로시져 안의 변수에 :(콜론)을 붙여야 한다

결과들을 참고하자.


%TYPE 속성(참조속성)

이미 선언 되어있는 데이터의 속성을 참조한다.

구문은 다음과 같다.

1
identifier table.column_name%TYPE;
cs


다음 예시를 참고하자.

1
2
3
4
5
6
7
8
9
DECLARE
  V_ENAME   EMP.ENAME%TYPE;
BEGIN
  SELECT ENAME INTO V_ENAME
  FROM EMP
  WHERE EMPNO = 7788;
  DBMS_OUTPUT.PUT_LINE('7788:'||:B_ENAME); --7788:SCOTT 
END;
/
cs



SQL을 배운지 얼마 되지 않아 잘못된 내용이 있을 수 있습니다. 틀린 내용이있다면, 댓글로 달아주세요.

'DATABASE(oracleDB 11g) > PLSQL' 카테고리의 다른 글

[PL/SQL]제어구조문의 기초  (0) 2019.02.19
[PL/SQL]PL/SQL 내의 SQL문의 기초  (0) 2019.02.18
[SQL]SQL 문장 처리 과정  (0) 2019.02.18
[PL/SQL]기본적인 PL/SQL블록 출력  (0) 2019.02.18
[PLSQL]PLSQL이란?  (0) 2019.02.07