본문 바로가기

DB

Oracle PL/SQL 프로시저 [데이터 타입 간 형 변환]

반응형

일부 데이터 타입의 경우 상호 데이터 타입 변환이 가능하다 가령 문자에서 숫자, 숫자에서 문자 ,문자에서 날짜 또는 날짜에서 문자 타입으로 변환이 가능하다. 형 변환 함수를 사용하여 명시적 으로 변환할 수 있으며 , 변경이 가능한 경우에 한해서 오라클에 의해 묵시적으로 자동 변환될 수도 있습니다. 그러나 가급적 올바른 데이터 타입을 선정하여 사용하도록 하고, 변환이 필요할 경우 명시적으로 선언하여, 개발자도 모르는 사이에 형 변환에 따른 문제가 발생하지 않도록 하는 것이 중요하다.

 

DECLARE
    I_NUM_EMPNO NUMBER;
    I_VAR_EMPNO VARCHAR2(100);
    
    BEGIN
    --NUMBER형의 값을 VARCHAR2 형 변수에 입력
    SELECT EMPNO
        INTO I_VAR_EMPNO
        FROM EMP
         WHERE ROWNUM = 1;
        DBMS_OUTPUT.PUT_LINE('empno(number to varchar2):' || I_var_empno);
        
        --VARCHAR2형 변수를 이용하여 연수을 수행
        I_NUM_EMPNO := I_VAR_EMPNO + 1;
        DBMS_OUTPUT.PUT_LINE('empno(varchar2 to number):' || I_num_empno);
        
        END;

emp 테이블의 empno 칼럼의 경우 NUMBER 형이지만 VARCHAR2형 변수인 I_var_empno에 정상적으로 입력이 된 것을 볼수 있다.

오라클이 문자형으로 암시적으로 변환했기 때문이다. 다음으로, I_var_empno 변수타입은 문자형이나 1을 더하는 연산을 정상적으로 수행하여 I_num_empno 변수에 정상적으로 처리되었다. 이는 역시 오라클이 문자형을 숫자형으로 묵시적으로 변환했음을 보여준다.

 

 

DECLARE
    I_NUM_EMPNO NUMBER;
    I_VAR_EMPNO VARCHAR2(100);
    
    BEGIN
    --NUMBER형의 값을 VARCHAR2 형 변수에 입력
    SELECT EMPNO
        INTO I_VAR_EMPNO
        FROM EMP
         WHERE ROWNUM = 1;
        DBMS_OUTPUT.PUT_LINE('empno(number to varchar2):' || I_var_empno);
        
        --VARCHAR2형 변수를 이용하여 연수을 수행
        I_NUM_EMPNO := I_VAR_EMPNO || '+ 1';
        DBMS_OUTPUT.PUT_LINE('empno(varchar2 to number):' || I_num_empno);
        
        END;

+1 에 문자열로 변환하면 에러가 발생한다.

7369 +1 이라는  문자열이기 때문에 숫자형으로 변환되지 못하고 에러가 발생한다.

반응형

'DB' 카테고리의 다른 글

Oracle PL/SQL 프로시저 [패키지]  (0) 2020.12.30
Oracle PL/SQL 프로시저  (0) 2020.12.30
Oracle PL/SQL 프로시저[커서와FOR문]  (0) 2020.12.28
Oracle PL/SQL 프로시저 [ 커서]  (0) 2020.12.27
Oracle PL/SQL 프로시저 [트랜잭션]  (0) 2020.12.27