오라클 PL/SQL Boolean을 DBMS로 출력하기

ORACLE SQL DEVELOPER를 통해 여러가지 테스트하다보면
Boolean 값이 어떤상태인지 디버그 하고 싶은 때가 있습니다.

이때, Boolean을 그냥 DBMS_OUTPUT 시키면 에러가 나는데요. 다음과 같은 방법으로 TRUE, FALSE 상태를 출력할 수 있습니다.

  dbms_output.put_line('BAL = '|| case when BOOLEANCODE then 'True' else 'False' end);

DBMS_OUTPUT 안에 CASE를 사용해서 의도적으로 Boolean 값을 문자로 출력하는 방식입니다.

다음은 실행예제입니다.

DECLARE 
  v_orderTotal NUMBER := 14;
  v_max_allowOrder NUMBER := 10;
  v_orderExceededBal BOOLEAN;
BEGIN
  v_orderExceededBal := NVL (v_orderTotal, 1) > v_max_allowOrder;
  dbms_output.put_line('BAL = '|| case when v_orderExceededBal then 'True' else 'False' end);
END;

실행시

123.PNG

 

오라클 PL/SQL Nested Block 이란?

PL/SQL 에서 Nested Block (네스티드 블록)이란 코드안의 코드를 말합니다.

Nested Block 을 사용하는 이유는 하나의 메인 Block 안에 하나이상의 Block 들로 구성되어 있어 프로그래머가 더 쉽게 관리하고 Exeption 발생시 프로그램이 완전히 멈추는대신 계속 구동할수 있도록 합니다.

Nested Block의 구성

zz.png

다음은 Nested Block 의 예제입니다.

여기서 주의할점은 Child Block 안에 DECLARE 된 Variables 는 해당 Block에서만 사용가능하기 때문에 Parent Block에는 사용할 수 없습니다.

SET SERVEROUTPUT ON SIZE 1000000;
DECLARE
  n_emp_id EMPLOYEES.EMPLOYEE_ID%TYPE := &emp_id1;
BEGIN
  DECLARE
    n_emp_id employees.employee_id%TYPE := &emp_id2;
    v_name   employees.first_name%TYPE;
  BEGIN
    SELECT first_name
    INTO v_name
    FROM employees
    WHERE employee_id = n_emp_id;
 
    DBMS_OUTPUT.PUT_LINE('First name of employee ' || n_emp_id || 
                                       ' is ' || v_name);
    EXCEPTION
      WHEN no_data_found THEN
        DBMS_OUTPUT.PUT_LINE('Employee ' || n_emp_id || ' not found');
  END;
END;

오라클 PL/SQL 날짜를 숫자로 바꾸기

ORACLE 11g

DATE 형식의 데이터를 NUMBER 숫자로 바꾸는 방법입니다.

to_number(to_char(sysdate, 'yyyymmdd'));

간단한 예제로 먼저 to_char 를 사용해 DATE 형식인 sysdate를 CHAR로 변환해줍니다.

그다음, to_number를 이용해 다시 변환합니다.

실행예제

select to_number(to_char(sysdate, 'yyyymmdd')) Converted from dual

결과

123.PNG

오라클 PL/SQL RPAD,LPAD 빈칸으로 채우기

오ㄹ 올

RPAD 와 LPAD를 사용해서 빈칸으로 스페이스를 띄우는 방법입니다.

사용법

RPAD (' ', Number of Sapce)

Example

begin
   line := ' PC' || RPAD (' ', 10) || 'xxx' || RPAD (' ', 63);
   dbms_output.put_line (line);
   dbms_output.put_line ('Length: ' || length (line));
end;
/
 PC          xxx                                                               
Length: 79

한줄 79줄에 PC를 출력하고 RPAD로 10칸 xxx출력후 다시 63칸을 띄워주었습니다.

PL/SQL Zero Fitted Number

Oracle SQL Developer 에서

PL/SQL LPAD를 사용해  ‘0’ 로 채워지게 표시하는 방법입니다.

 

LPAD('tech', 8);

Result: ‘ tech’

LPAD를 사용하면 첫번째것과 같이 8개의 캐릭터중에 4칸을 띄우고
tech가 출력됩니다.

이것을 이용해서 0으로 채우면,

LPAD('tech', 8, '0');

Result: ‘0000tech’

PL/SQL Exception 예외처리하기

Exception을 처리하는 방법입니다.

다음코드는 is_it_number(p_value) 라는 Function(펑션)을 통해서
p_value 가 숫자가 아닐때 Exception을 통해 에러메세지를 출력합니다.

코드

set serveroutput on
create or replace function is_it_number(p_value  IN VARCHAR2) 
RETURN BOOLEAN
IS
v_numberOK   NUMBER;

BEGIN

    v_numberOK := TO_NUMBER(p_value);
    RETURN TRUE;
 
EXCEPTION
    WHEN VALUE_ERROR THEN
       DBMS_OUTPUT.put_line('Invalid number '||p_value);
       RETURN FALSE;
END;

실행 (숫자를 넣었을때)

set serveroutput on
BEGIN
  IF is_it_number('1234') THEN
    DBMS_OUTPUT.PUT_LINE('Number_ok');
  ELSE
     DBMS_OUTPUT.PUT_LINE('Invalid Number');
  END IF;
END;

출력화면

123.PNG

실행 (숫자가 아닐때 = Exception일때)

set serveroutput on
BEGIN
  IF is_it_number('A1234') THEN
    DBMS_OUTPUT.PUT_LINE('Number_ok');
  ELSE
     DBMS_OUTPUT.PUT_LINE('Invalid Number');
  END IF;
END;

출력화면

123.PNG