본문 바로가기

개발공부/SQL

PL/SQL의 구조 (1)

728x90
반응형

01.  PL/SQL 구조

 

PL/SQL은 오라클에서 제공하는 SQL로 쿼리문에서 변수 정의, 조건처리(IF), 반복처리(LOOP, WHILE, FOR) 등을 지원하며, SQL의 단점을 보완해준다.

PL/SQL은 블록구조의 언어로서, 크게 선언부, 실행부, 예외처리부 세부분으로 나눌 수 있다.

 

- DECLARE(선언부) : PL/SQL에서 사용하는 모든 변수나 상수를 선언하는 부분 시작할때 선언을 하고 시작함

- BEGIN(실행부) : 절차적 형식으로 SQL문을 실행할 수 있도록 절차적 언어의 요소인 제어문, 반복문, 함수 정의 등 로직을 기술할 수 있는 부분

- EXCEPTION(예외처리부) : PL/SQL문이 실행되는 중에 에러가 발생할 수 있는데 이를 예외 사항이라고 함. 이러한 예외 상황이 발생했을 때 이를 해결하기 위한 문장을 기술할 수 있는 부분

DECLARE
    변수선언문;
BEGIN
    프로그램실행문;
EXCEPTION
    예외처리문;
END;
/

작성요령

  • PL/SQL 블록 내에서는 한 문장이 종료할 때마다 세미콜론(;)을 사용
  • END 뒤에 ;을 사용하여 하나의 블록이 끝났다는 것을 명시함
  • 단일 행 주석은 -- 이고 , 여러 행 주석은 /* */이다.
  • 쿼리문을 수행하기 위해서 / 가 반드시 입력되어야 하며, PL/SQL 블록은 행에 /가 있으면 종결된것으로 간주함

아래는 PL/SQL로 변수를 선언하고 'Hello World' 문자열을 출력하는 예시

DECLARE
  my_string VARCHAR2(50);
BEGIN
  my_string := 'Hello World';
  DBMS_OUTPUT.PUT_LINE(my_string);
END;

 

02. 변수 선언과 대입문

 

PL/SQL 선언부에서는 실행부에서 사용할 변수를 선언한다. 변수를 선언할 때 변수명 다음 자료형을 기술해야함.

PL/SQL 변수 자료형은 SQL에서 사용하는 자료형과 거의 유사하다.

 

변수 선언

NUMM NUMBER(4);
NAMEE VARCHAR2(10);

PL/SQL에서 변수를 선언할 때 위와같이 SQL에서 사용하던 자료형과 유사하게 선언하는 것을 스칼라 변수라고 한다.

일반적으로 변수는 자료형과 크기를 해당 테이블의 해당 컬럼과 동일한 형태로 선언한다.

 

2.1 대입문으로 변수에 값 지정하기

PL/SQL에서는 변수의 값을 지정하거나 재지정하기 위해서 :=를 사용한다.

:= 의 좌측에 새값을 받기 위한 변수를 기술하고 , 우측에 저장할 값을 기술한다.

NUMM := 1001;
NAMEE := '호랑이';

EX) 출력하기

DECLARE
  NUMM NUMBER := 1001;
  NAMEE VARCHAR2(20) := '호랑이';
BEGIN
  DBMS_OUTPUT.PUT_LINE('사번: ' || NUMM);
  DBMS_OUTPUT.PUT_LINE('이름: ' || NAMEE);
END;
/

실행결과

사번: 1001
이름: 호랑이

PL/SQL에서 문자열을 합치기 위해서는 ||를 사용할 수 있습니다. + 기호를 사용할 수도 있지만, ||가 더 많이 사용됩니다. 

따라서 

'사번: ' || NUMM || ', 이름: ' || NAMEE 와 

'사번: ' + NUMM + ', 이름: ' + NAMEE는 같은 결과를 출력합니다.

 

2.2 스칼라 변수 / 레퍼런스 변수

변수를 선언하기 위해 사용할 수 있는 자료형은 크게 스칼라와 레퍼런스로 나눌 수 있다.

 

스칼라 변수는 SQL 에서 사용하던 자료형과 거의 유사함. 숫자는 NUMBER , 문자는 VARCHAR2 로 선언한다.

NUMM NUMBER(4) := 1001;
NAMEE VARCHAR2(20) := '호랑이';

 

레퍼런스 변수는 이전에 선언된 다른 변수 또는 데이터베이스 컬럼에 맞추어 변수를 선언하기 위해 %TYPE 속성을 사용한다.

NUMM EMP.EMPNO%TYPE;
NAMEE EMP.ENAME%TPYE;

%TYPE 속성을 사용하여 선언한 NUMM 변수는 해당 테이블(EMP)의 해당 컬럼(EMPNO)의 자료형과 크기를 그대로 참조해서 정의한다.

오라클에서 제공하는 레퍼런스 변수는 컬럼의 자료형이 변경되더라도 컬럼의 자료형과 크기를 그대로 참조하기 때문에, 굳이 레퍼런스 변수 선언을 수정할 필요가 없다는 장점이 있다.

 

%TYPE이 컬럼 단위로 참조한다면, 로우(행) 단위로 참조하는 %ROWTPYE이 있다.

데이터베이스의 테이블 또는 VIEW의 일련의 컬럼을 RECORD로 선언하기 위하여 %ROWTYPE을 사용한다.

데이터베이스 테이블 이름을 %ROWTYPE 앞에 접두어를 붙여 RECORD를 선언하고, FIELD는 테이블이나 뷰의 컬럼 명과 데이터타입과 LENGTH를 그대로 가져올 수 있다.

VEMP EMP%ROWTYPE;

%ROWTYPE을 사용시 장점은 특정 테이블의 컬럼의 개수와 데이터 형식을 모르더라도 지정할 수 있다는 것이다.

SELECT문으로 로우(행)을 검색할 때 유리하다.

 

 

728x90
반응형