[ORCLE] PL/SQL 변수의 데이터 타입 , data type of variable [오라클]

PL/SQL 데이터 타입 예시

PL/SQL 데이터 타입에 대해 안내해드리겠습니다.

  • Scalar Data Type
  • Composite Data Type (collections and records)

Scalar Data Type

기본 SQL에도 제공하는 number(수치형), char(고정문자형), varchar2(가변문자형) 타입은 PL/SQL에서도 제공해드립니다. SQL에서 varchar2가 최대 4000byte만큼 확장할 수 있는데 비해 PL/SQL 에서는 32767byte까지 확장 가능합니다. (명칭이 동일한만큼 묵시적인 형변환이 이루어집니다)

Composite Data Type (collections and records)

뿐만 아니라, PL/SQL에서 제공하는 타입이 존재합니다. 보통의 개발언어에서 볼 수 있는 boolean(논리형), true 와 false 두 가지 값을 가집니다. 레코드(record) 타입, 로(row) 타입, 칼럼(column) 타입, 테이블(table) 타입이 있습니다. 그 외에도 커서(cursor), 사용자정의예외(user-defined exception) 등을 제공합니다. 아래와 같이 데이터 타입을 확인할 수 있는 스크립트를 준비해 보았습니다. 해당 예시를 확인해 보세요~

SET SERVEROUTPUT ON
DECLARE
   NUM            NUMBER (3, 2) := 1.38;                                --1~38
   CHA            CHAR (100) := '1.2.1.고정문자형 CHAR(1~32767)';
   VAR            VARCHAR2 (100) := '1.2.2.가변문자형 VARCHAR2(1~32767)';
   DAT            DATE := SYSDATE;
   BOO            BOOLEAN := TRUE;
   TYPE RECUSERDEFINED IS RECORD
   (
      N   NUMBER (1),
      V   VARCHAR2 (100)
   );
   TYPERECORD     RECUSERDEFINED;
   ROWTYPEEMP     EMP%ROWTYPE;
   TYPEEMPEMPNO   EMP.EMPNO%TYPE;
   TYPE TABUSERDEFINED IS TABLE OF VARCHAR2 (1)
                             INDEX BY PLS_INTEGER;
   TYPETABLE      TABUSERDEFINED;
BEGIN
   --데이터 유형 DATA TYPE
   
   --1.1. 수치형 NUMBER
   DBMS_OUTPUT.PUT_LINE (NUM);
   
   --1.2.1. 고정문자형 CHAR
   DBMS_OUTPUT.PUT_LINE (CHA);

   --1.2.2. 가변문자형 VARCHAR2
   DBMS_OUTPUT.PUT_LINE (VAR);

   --1.3. 날짜형 DATE
   DBMS_OUTPUT.PUT_LINE (DAT);

   --1.4. 논리형 BOOLEAN
   DBMS_OUTPUT.PUT_LINE (SYS.DIUTIL.BOOL_TO_INT (BOO));

   --2.1. 레코드 RECORD TPYE
   TYPERECORD.V := 'My name is BeomSang';
   DBMS_OUTPUT.PUT_LINE (TYPERECORD.V);
   
   --2.2.1. ROW TYPE
   ROWTYPEEMP.EMPNO := '7777';
   DBMS_OUTPUT.PUT_LINE (ROWTYPEEMP.EMPNO);

   --2.2.2. ROW COL TYPE
   TYPEEMPEMPNO := '3333';
   DBMS_OUTPUT.PUT_LINE (TYPEEMPEMPNO);

   --2.3. 테이블 TABLE TYPE
   TYPETABLE (1) := '9';
   DBMS_OUTPUT.PUT_LINE (TYPETABLE (1));
END;
/

댓글