레코드 타입과
테이블 타입이 있다.
A>레코드 타입
1.정의와 선언
TYPE 타입 이름 IS RECORD(
필드 선언
);
식별자 TYPE_NAME
2. 예시
이때는 %TYPE 은 되어도 %ROWTYPE은 안된다.
예시2. 입력받고 출력
B>테이블 타입 변수
=컬렉션 이라고도 한다.
배열이 여러개 중첩된 것 같은 테이블 모양
키와 값으로 구성되어 있다.
0.종류
1.키
UNIQUE 속성이며
숫자일 경우 :BINARY INTEGER 또는 PLS_INTEGER
문자일 경우 :VARCHAR2
2.값
스칼라 데이터 유형도 가능
레코드 타입도 가능
3.정의와 선언
예시1. 사번이 7499 사람 이름 인덱스 0에 저장하고 출력
DECLARE
t_name VARCHAR2(20);
TYPE tbl_emp_name IS TABLE OF
emp.ename%TYPE
INDEX BY BINARY_INTEGER;
v_name tbl_emp_name;
BEGIN
SELECT ename INTO t_name
FROM emp
WHERE empno=7499;
v_name(0):=t_name;
DBMS_OUTPUT.PUT_LINE(v_name(0));
END;
/
예시2 . 반복문을 사용해서 사원 이름 출력하기
DECLARE
TYPE e_table_type IS TABLE OF
emp.ename%TYPE
INDEX BY BINARY_INTEGER;
tab_type e_table_type;
a BINARY_INTEGER :=0; -- BEGIN 에서 인덱스로 쓸 a 선언
BEGIN
FOR i IN(SELECT ename FROM emp) LOOP --IN 횟수 만큼 루핑 i의 인덱스일때의 결과
--i는 증감변수
a := a+1;
tab_type(a) := i.ename;
END LOOP;
FOR j IN 1..a LOOP --1부터 a 까지
DBMS_OUTPUT.PUT_LINE(tab_type(j));
END LOOP;
END;
C> 바인드 변수
호스트 변수라고도 한다.
PL/SQL 바깥 블록에서 선언되고
PL/SQL 안에서 사용된다.
1.선언, 사용
VARIABLE [바인드 변수] [타입]
BEGIN
SELECT(pay*12) + NVL(bonus,0) INTO : v_bind
FROM professor
WHERE profno =1001;
END;
실행 한뒤
PRINT v_bind;
하면 결과가 나온다.
D> 조건문
1.IF THEN
IF 조건 THEN 실행문장;
실행문
END IF; --반드시 닫아줘야한다.
2.IF THEN ELSIF
IF 조건 THEN
실행문장
ELSIF 조건 THEN
실행문장
END IF;
3.IF THEN ELSE
IF 조건 THEN
실행문
ELSE
실행문
END IF;
E>CASE 문
CASE 조건
WHEN 조건1 THEN 결과1
WHEN 조건2 THEN 결과2
ELSE 기본값
END;
F>반복문
1.기본 LOOP
조건을 나중에 검색 =do while
LOOP
PL/SQL 문장 ;
PL/SQL 문장 ;
EXIT 조건 ; --ex)WHEN 조건
END LOOP;
2.WHILE LOOP
시작부터 조건을 검색
문형:
WHILE 조건 LOOP
PL/SQL 문장
PL/SQL 문장 ;
END LOOP;
3.FOR 반복문
역순으로 반복하려면 reverse 를 하면 된다.
FOR 증감변수 IN [REVERSE] 시작..끝 LOOP
PL/SQL 문장 ;
PL/SQL 문장 ;
END LOOP;
4.CONTINUE
다시 반복조건으로 되돌아간다.
CONTINUE WHEN 조건
'DB관련 > oracle' 카테고리의 다른 글
예외와 예외처리 (0) | 2021.01.21 |
---|---|
PL/SQL -4 CURSOR (0) | 2021.01.21 |
PL/SQL -2 스칼라 변수 (0) | 2021.01.20 |
PL/SQL -1 (0) | 2021.01.20 |
복수행 함수 - 연산 함수와 그룹함수 (0) | 2021.01.15 |