* Youtube Link - https://www.youtube.com/watch?v=ONvYEeJXQmo&list=PLVsNizTWUw7FzFgU1qe-n7_M7eMFA9d-f&index=15
들어가면서
7장에서는 PL/SQL 고급을 다루어볼 예정이다.
7.1.1 Oracle에서 지원하는 데이터 형식의 종류
숫자 데이텨 형식
1바이트 -> 8비트 -> 00000000
BINARY_FLOAT 4Bytes (32bit 부동 소수점)
BINARY_DOUBLE 8Bytes (64bit 부동 소수점)
NUMBER(p,[s]) 5~21Bytes (전체 자리수(p)와 소수점 이하 자리수(s)을 가진 숫자형.)
문자 데이터 형식
CHAR는 영문자
NCHAR는 유니코드, 한글이 들어가는 경우 사용하면 됨.
CHAR로 한글이 들어가도 되지만 두배로 잡아야 하기 때문에 유니코드를 사용하는 NCHAR가 편하다.
VARCHAR2(n) 가변길이형, 4000글자까지 표현 가능
NVARCHAR2(n) 유니코드 가변길이 문자형.
CLOB굉장히 큰 글자를 넣을 때 사용. 최대 128TB
NCLOB굉장히 큰 글자를 넣을 때 사용. 한글 소설이다 그러면 NCLOB이다. 최대 128TB. 거의 무제한에 가깝게 넣을 수 있다.
주로 VARCHAR2를 많이 사용을 하는데 고정 길이는 CHAR형을 사용한다.
INSERT/UPDATE 시 CHAR형이 더 좋은 성능을 발휘한다.
N자가 붙은 것은 한글이다.
이진 데이터 형식
BLOB은 대용량의 이진 데이터를 저장할 수 있다.
그림, 동영상, 음악도 저장할 수 있다. 거의 무제한에 가깝게 저장이 된다.
BFILE은 이진 데이터를 파일 형태로 저장함. 운영체제에 외부 파일형태로 저장됨.
날짜와 시간 데이터 형식
- SELECT SYSDATE FROM DUAL; -- 현재 날짜
- SELECT TO_CHAR(SYSDATE, 'YYYY/MM/DD HH:MM:SS') "현재 날짜" FROM DUAL;
- SELECT TO_DATE('20201231235959', 'YYYYMMDDHH24MISS') "날짜 형식" FROM DUAL;
기타 데이터 형식
- RAWID 10바이트
- XMLType N/A XML 데이터를 저장하기 위한 데이터 형식.
- URIType N/A URL 형식의 데이터를 저장하기 위한 데이터 형식.
ROWID를 통해서 내부적으로 저장되어 있는 물리적인 주소도 알 수 있다.
LOB(Large Object: 대량의 데이터)를 저장하기 위해서 CLOB, BLOB 데이터 형식을 지원한다.
차후 실습을 통해서 확인해보겠다.
유니코드 데이터
변수의 사용
SET SERVEROUTPUT ON; 명령어를 통해서 SERVEROUTPUT을 ON한다.
DBMS_OUTPUT.PUT_LINE(myVar1); 명령어를 통해서 서버에 output한다.
데이터 형식과 형변환
굉장히 중요한 함수이다.
CAST 함수를 통해서 형변환이 가능하다.
예를 들어 이와 같이 AVG() 함수를 이용해서 평균값을 구한 경우 다음과 같은 결과값을 얻을 수 있다.
CAST() 함수를 이용해서 NUMBER(3) 형식으로 소수점 데이터를 형변환하였다.
NUMBER는 정수형 타입이다.
그래서 2.7666666666666666666666의 값이
3으로 형변환되었다.
CAST(expression AS DATE)
/,$,%,@ 등은 날짜의 형식을 지정할 수 있다.
CAST(expression AS CHAR) 및 ||
|| 기호를 통해서 문자열로 잇는다.
CAST(expression AS CHAR) 명령어를 통해서 숫자를 문자로 바꾼다.
TO_CHAR(expression, '형식')
숫자를 달러, 원 등의 통화로 바꿀 수 있다.
그리고 SYSDATE(현재날짜)를 'YYYY/MM/DD HH:MM:SS' 형식으로 변경할 수 있다.
그러면 2024/11/04 05:11:39 형식으로 바꿀 수 있다.
옵션을 주어서 문자를 다른 형태로 바꿀 수 있다.
그 문자가 숫자일 수도 있다. 16진수와 같은 것이다. 이렇게 다양한 형태로 바꿀 수 있다.
TO_CHAR() 및 TO_NUMBER()를 통한 16진수 <-> 10진수 변환
TO_CHAR() 명령어를 통해서 문자를 16진수로 변형할 수 있다.
16진수로 변형해서 문자로 바꿀 수 있다.
그리고 TO_NUMBER()를 통해서 16진수의 문자인 숫자를 다시 10진수의 숫자로 바꿀 수 있다.
그리고 '0123'인 문자를 TO_NUMBER를 통한 숫자로 표현을 하면 다음과 같이
123 그리고 1234.456으로 표현될 수 있다.
이외 문자열을 잇는 방법
1) 는 + 연산을 통해서 문자인 숫자를 서로 더했다. 결과로 300이 출력되었다. 정수로 형변환이 되었다.
2) CONCAT() 함수를 통해서 문자를 연결했다. 결과는 100200이다. 문자로 출력되었다.
3) 100 || '200' 의 결과는 100200이다. || 연산은 문자로 암시적 형변환을 일으킨다.
4) >,>= 등의 비교 연산식에 있는 '500' 문자는 500이라는 숫자로 암시적 형변환이 일어나서 WHERE 조건절을 실행하였다. 결과는 price >= 500 인 구매 목록이다.
FROM DUAL 을 통해서 임시 테이블을 만든다.
그리고 SELECT문을 통해서 연산을 한 결과들을 임시적으로 출력한다.
감사합니다.