변수선언의 기초
변수는 데이터의 임시 저장 영역 혹은 저장된 값을 조작하거나 재사용할때 사용한다.
변수 이름을 정할때는 다음의 조건을 따른다
- 문자로 시작
- 중간에 숫자 표함 가능
- 특수 문자 포함 가능
- 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(3) NOT 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 |