1. 참조 자료형
2. 제어문(조건문)
1. 참조 자료형
[ 정의 ]
- 테이블로부터 직접 자료형을 알아내는 방법
- 생산성 + 유지보수성
- 종류: %TYPE(단일), %ROWTYPE(전체)
[ %TYPE ]
- 사용하는 테이블의 특정 컬럼 자료형을 그대로 참조해서 변수에 적용시킨다.
- 컬럼 참조
1) 자료형
2) 길이
3) NOT NULL
- 예제
--예제1
DECLARE
VNAME VARCHAR2(20);
VSSN TBLINSA.SSN%TYPE;
VSUDANG TBLINSA.SUDANG%TYPE;
BEGIN
SELECT NAME, SSN, SUDANG INTO VNAME, VSSN, VSUDANG FROM TBLINSA
WHERE NAME = '홍길동';
DBMS_OUTPUT.PUT_LINE(VNAME);
DBMS_OUTPUT.PUT_LINE(VSSN);
DBMS_OUTPUT.PUT_LINE(VSUDANG);
END;
--> 변수 VNAME은 TBLINSA테이블의 NAME컬럼 자료형에 맞게 VARCHAR2로 지정
--> 변수 VSSN은 TBLINSA테이블의 SSN컬럼 자료형에 맞는 %TYPE으로 지정
--> 변수 VSUDANG은 TBLINSA테이블의 SUDANG컬럼 자료형에 맞는 %TYPE으로 지정
--예제2
DECLARE
VNAME TBLINSA.NAME%TYPE;
VGENDER VARCHAR2(1);
BEGIN
SELECT SUBSTR(SSN, 8, 1) INTO VGENDER FROM TBLINSA
WHERE NAME = '홍길동';
DBMS_OUTPUT.PUT_LINE(VGENDER)
END;
--> 변수 VGENDER는 TBLINSA테이블에 없는 컬럼을 직접 만드는것도 가능하다.
--> 변수 VGENDER를 통해 성별을 출력할 수 있다.
[ %ROWTYPE ]
- 행 참조(컬럼 전체)
- %TYPE의 집합
- 예제
DECLARE
VROW TBLINSA%ROWTYPE; -- 테이블의 모든 컬럼의 집합 참조, 레코드 참조
BEGIN
SELECT * INTO VROW FROM TBLINSA WHERE NAME = '홍길동';
DBMS_OUTPUT.PUT_LINE(VROW.NAME);
DBMS_OUTPUT.PUT_LINE(VROW.BUSEO);
DBMS_OUTPUT.PUT_LINE(VROW.CITY);
END;
--> 변수 VROW는 TBLINSA 테이블의 모든 컬럼의 자료형을 전부 참조해서 지정
--> %ROWTYPE이 무조건 좋은건 아니다.
--> 필요없는 컬럼까지 전부 복사하기 때문...
2. 제어문(조건문)
[ IF ]
1. IF
DECLARE
VNUM NUMBER := 10;
BEGIN
IF VNUM > 0 THEN
DBMS.OUTPUT.PUT_LINE('양수');
END IF;
END;
2. ELSE
DECLARE
VNUM NUMBER := -10;
BEGIN
IF VNUM > 0 THEN
DBMS.OUTPUT.PUT_LINE('양수');
ELSE
DBMS.OUTPUT.PUT_LINE('음수');
END IF;
END;
3. ELSIF -----> 주의할것 자바의 ELSE IF 와 동일한 기능이지만, SQL에서는 ELSIF로 표기한다!!
DECLARE
VNUM NUMBER := 0;
BEGIN
IF VNUM > 0 THEN
DBMS.OUTPUT.PUT_LINE('양수');
ELSIF VNUM < 0 THEN
DBMS.OUTPUT.PUT_LINE('음수');
ELSE
DBMS.OUTPUT.PUT_LINE('0');
END IF;
END;
[ CASE ]
- ANSI-SQL(CASE문)과는 다른 구문이다.
1) ANSI-SQL의 CASE: 표현식 정도의 수준만 사용한다.
2) PL/SQL의 CASE: 문장 단위 실행도 가능하다.
DECLARE
VNAME TBLCOUNTRY.NAME%TYPE;
VCONTINENT TBLCOUNTRY.CONTINENT%TYPE;
VRESULT VARCHAR2(30);
BEGIN
SELECT NAME, CONTINENT INTO VNAME, VCONTINENT FROM TBLCOUNTRY
WHERE NAME = '대한민국';
--방법1 IF문 이용
IF VCONTINENT = 'AS' THEN
VRESULT := '아시아';
ELSIF VCONTINENT = 'EU' THEN
VRESULT := '유럽';
ELSIF VCONTINENT = 'AF' THEN
VRESULT := '아프리카';
ELSE
VRESULT := '기타';
END IF;
DBMS_OUTPUT.PUT_LINE(VNAME || '-' || VRESULT);
-- 방법2 CASE문 이용
CASE VCONTINENT
WHEN 'AS' THEN VRESULT := '아시아';
WHEN 'EU' THEN VRESULT := '유럽';
WHEN 'AF' THEN VRESULT := '아프리카';
ELSE VRESULT := '기타';
END CASE;
DBMS_OUTPUT.PUT_LINE(VNAME || '-' || VRESULT);
END;
----> TBLCOUNTRY테이블의 NAME컬럼중 '대한민국'의 CONTINENT컬럼 내용에 따라 값이 출력된다.
----> 출력: 대한민국 - 아시아
MEMO>
# PL/SQL에서의 대입연산자(=)은 세미콜론(:)을 앞에 붙여야한다. ex) TEST := 10;
# 테이블에 속한 컬럼의 자료형 확인하는법
--->원하는 테이블 드래그 > SHITF + F4 > 해당 테이블에 속한 자료형을 보여준다.
# PL/SQL 쿼리짜는것이 아직 어려우면, BEGIN-END 구문안에 ANSI-SQL 먼저 작성한다.
# 데이터베이스 프로젝트를 현재 하고 있는데, 오늘 알게 된 사실은, DB에서 가장 중요한건 테이블의 갯수가 많은 것이 아닌, 각 테이블 마다 컬럼의 종류가 여러가지가 있고(볼륨 업), 그 하나하나 컬럼의 기능을 세밀화 및 디테일하게 작업 하는것이 중요하다는 것을 깨달았다.
'인천일보아카데미 > - 학습일지' 카테고리의 다른 글
[학습일지]JAVA교육일지 58일차 (0) | 2022.06.28 |
---|---|
[학습일지]JAVA교육일지 54일차 (0) | 2022.06.25 |
[학습일지]JAVA교육일지 52일차 (0) | 2022.06.24 |
[학습일지]JAVA교육일지 51일차 (0) | 2022.06.24 |
[학습일지]JAVA교육일지 50일차 (0) | 2022.06.24 |