본문 바로가기
DataBase/Oracle

PL/SQL) PL/SQL이란?, 익명 블럭 기초

by 박채니 2022. 5. 2.

안녕하세요, 코린이의 코딩 학습기 채니 입니다.

 

개인 포스팅용으로 내용에 오류 및 잘못된 정보가 있을 수 있습니다.


PL/SQL (Procedural Language Extension to SQL)

- SQL 절차적 언어 확장

- PL/SQL 안에서는 기본 SQL 외에 변수, 조건처리, 반복처리 가능

 

PL/SQL 유형

① 익명 블럭

② PL/SQL 객체

   - Procedure 

   - Function

   - Trigger

   - Job

   - Scheduler


익명블럭

익명블럭 구조

declare
	- (선택) 변수선언부
begin
	- (필수) 실행부
excetption
	- (선택) 예외처리부
end;
/

 

콘솔 출력 세팅(세션단위)
- SQL 혹은 컴퓨터를 껐다 킬 때마다 세팅 해줘야 함

set serveroutput on;

 

콘솔 출력 코드

begin
    -- 콘솔출력
    dbms_output.put_line('안녕');
end;
/

dbms_output.put_line()과 익명 블럭을 이용하여 '안녕'을 출력하였습니다.

 

기본 구문 활용하여 출력하기

declare
    -- 변수선언
    vid varchar2(10);
begin
    select
        emp_id
    into
        vid -- 조회된 emp_id를 vid변수에 담음
    from
        employee
    where
        emp_name = '선동일';
        
    dbms_output.put_line('사번 : ' || vid);
--exception

end;
/

into절을 이용하여 조회된 값을 변수에 담을 수 있습니다.

 

exception절 활용하기

declare
    -- 변수선언
    vid varchar2(10);
begin
    select
        emp_id
    into
        vid -- 조회된 emp_id를 vid변수에 담음
    from
        employee
    where
--        emp_name = '선동일';
        emp_name = '선동이';	-- ORA-01403: no data found 발생
        
    dbms_output.put_line('사번 : ' || vid);
--exception

end;
/

데이터가 없는 값을 찾으면 0행이 리턴되기 때문에 해당 값을 변수에 담을 수 없으므로,

"ORA-01403: no data found" 이 발생하게 되며 해당 예외를 exception절에서 잡을 수 있습니다.

 

declare
    -- 변수선언
    vid varchar2(10);
begin
    select
        emp_id
    into
        vid -- 조회된 emp_id를 vid변수에 담음
    from
        employee
    where
--        emp_name = '선동일';
        emp_name = '선동이';
        
    dbms_output.put_line('사번 : ' || vid);
exception
    when no_data_found then dbms_output.put_line('찾으시는 사원이 존재하지 않습니다.');
end;
/

 

데이터를 입력 받아 익명 블럭 활용하기

declare
    -- 변수선언
    vid varchar2(10);
begin
    select
        emp_id
    into
        vid -- 조회된 emp_id를 vid변수에 담음
    from
        employee
    where
--        emp_name = '선동일';
--        emp_name = '선동이';
        emp_name = '&사원명';
        
    dbms_output.put_line('사번 : ' || vid);
exception
    when no_data_found then dbms_output.put_line('찾으시는 사원이 존재하지 않습니다.');
end;
/

&를 이용하여 데이터를 직접 입력할 수 있습니다.

 

※ 스크립트 출력 창에는 유효성 검사 구문도 같이 출력 되므로, 결과만 보고 싶다면 보기 → DBMS 출력 창을 이용할 수 있습니다.

(접속 계정 설정 필요!)