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