더북(TheBook)

익명 블록

그럼 이름이 없는 익명 블록anonymous block 을 사용해 PL/SQL 코드를 작성해 보자. 먼저 변수를 선언하고 값을 할당해 이 값을 출력하는 익명 블록을 만들어 보자.

입력

    SQL>  DECLARE
    2       vi_num NUMBER;
    3     BEGIN
    4       vi_num := 100;
    5
    6       DBMS_OUTPUT.PUT_LINE(vi_num);
    7     END;
    8     /

결과

    PL/SQL 처리가 정상적으로 완료되었습니다.

위 코드를 SQL*Plus 상에서 실행시키면 “PL/SQL 처리가 정상적으로 완료되었습니다.”란 메시지가 나오는데, 이는 성공적으로 컴파일이 완료됐다는 뜻이다. 익명 블록은 컴파일이 완료됨과 동시에 실행까지 완료된다.

먼저 선언부부터 간략히 살펴보자. DECLARE 다음에 실행부에서 사용할 변수를 선언했다. 변수를 선언할 때도 끝에 반드시 세미콜론(;)을 붙여야 한다. PL/SQL에서는 SQL에서 사용하는 모든 데이터 타입을 사용할 수 있다. 위 코드에서는 vi_num이란 NUMBER 형 변수를 선언했는데, PL/SQL에서 값의 할당은 다른 프로그래밍 언어와 달리 등호(=)가 아닌 ‘:=’ 이다. 즉 특정 변수에 ‘:=’를 기준으로 오른쪽 값을 왼쪽에 할당한다는 뜻이다.

BEGIN으로 시작되는 실행부에서는 vi_num 변수에 100을 할당하고 나서, DBMS_OUTPUT.PUT_LINE이란 함수의 매개변수로 이 변수를 전달했다. DBMS_OUTPUT 패키지에 대해서는 이후 자세히 살펴 볼 텐데, 지금 당장은 괄호 안에 있는 매개변수 값을 출력하는 기능을 갖고 있다고만 알아 두자.

그런데 앞의 결과를 보면 정상적으로 처리되었다고만 했지 값은 출력되지 않았다. DBMS_OUTPUT 패키지를 사용해 값을 보려면 특별한 처리를 해줘야 한다. SQL*PLUS 상에서 다음 명령어를 입력 후 다시 실행해 보자.

입력

    SQL>  SET SERVEROUTPUT ON
    SQL>  DECLARE
    2       vi_num NUMBER;
    3     BEGIN
    4       vi_num := 100;
    5
    6       DBMS_OUTPUT.PUT_LINE(vi_num);
    7     END;
    8     /
    100

결과

    PL/SQL 처리가 정상적으로 완료되었습니다.

실행 부분의 맨 끝을 보면 100이 출력되었는데, 만약 현재 로그온 한 SQL*Plus를 종료하고 다시 접속한다면 “SET SERVEROUTPUT ON”이란 명령어를 다시 실행해야 출력 결과를 볼 수 있다. 참고로 SQL*Plus 상에서 PL/SQL 블록을 실행했을 때 총 소요시간도 알 수 있는데, 이를 위해서는 SET TIMING ON 명령어를 실행하면 된다.

입력

    SQL>  SET SERVEROUTPUT ON
    SQL>  SET TIMING ON
    SQL>  DECLARE
    2       vi_num NUMBER;
    3     BEGIN
    4       vi_num := 100;
    5
    6       DBMS_OUTPUT.PUT_LINE(vi_num);
    7     END;
    8     /
    100

결과

    PL/SQL 처리가 정상적으로 완료되었습니다.
    경 과 : 00:00:00.06

이제 SQL Developer 상에서 이 익명 블록을 실행해 보자. SQL Developer 상에서 실행 결과를 보려면, [보기-DBMS 출력] 메뉴를 선택해야 한다. 이 메뉴를 선택하면 별도의 출력 창이 나오는데 여기서 왼쪽 상단의 연두색 ‘+’기호를 클릭하면 출력 내용을 볼 수 있다.

그림 8-1 SQL Developer 상에서 DBMS 출력 창
신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.