DB 26일차

김강산·2022년 7월 8일

orcle SQL

목록 보기
23/25

<학습목표>
1. GOTO : 반복
2. FOR : 반복
3. EXCEPTION
1) 정의된 예외
2) 정의 안된 예외
3) 사용자 정의
4. SURSOR : SELECT 결과를 메모리에 BIND후 한행씩 작업

GOTO
EX)

구구단

FOR
EX)

REVERSE

별찍기

EXCEPTION

  1. 정의된 ORACLE SERVER ERROR
  2. 정의 되지 않은 ORACLE SERVER ERROR
  3. 사용자 정의 ERROR

EX)자주사용되는 오류
DECLARE
V_NM VARCHAR2(60);
BEGIN
SELECT LPROD_NM INTO V_NM
FROM LPROD
WHERE LPROD_GU = 'P201';
DBMS_OUTPUT.PUT_LINE('V_NM : ' || V_NM);
--정의된 오류 처리
EXCEPTION
WHEN NO_DATA_FOUND THEN --ORA-01403
DBMS_OUTPUT.PUT_LINE('해당 정보가 없습니다.');
END;
/

DECLARE
V_NM VARCHAR2(60);
BEGIN
SELECT LPROD_NM INTO V_NM
FROM LPROD
WHERE LPROD_GU LIKE 'P2%'; --P201, P202..
DBMS_OUTPUT.PUT_LINE('V_NM : ' || V_NM);
--정의된 오류 처리
EXCEPTION
WHEN TOO_MANY_ROWS THEN --ORA-01422
DBMS_OUTPUT.PUT_LINE('한 개 이상의 값이 나왔습니다');
END;
/

DECLARE
V_NM VARCHAR2(60);
BEGIN
SELECT LPROD_NM + 0 INTO V_NM
FROM LPROD
WHERE LPROD_GU LIKE 'P201'; --P201, P202..
DBMS_OUTPUT.PUT_LINE('V_NM : ' || V_NM);
--정의된 오류 처리
EXCEPTION
WHEN OTHERS THEN --ORA-01722(SQLERRM : SQL ERROR MESSAGE)
DBMS_OUTPUT.PUT_LINE('기타오류 : ' || SQLERRM);
END;
/

정의되지 않은 예외인 경우
EX)

CURSOR
2005년도 상품별 매입수량의 합계

DECLARE
V_PROD VARCHAR2(20);
V_QTY NUMBER;
--SURSOR 선언
CURSOR GAEDDONGI IS
SELECT BUY_PROD, SUM(BUY_QTY) FROM BUYPROD
WHERE EXTRACT(YEAR FROM BUY_DATE) = 2005
GROUP BY BUY_PROD ORDER BY BUY_PROD ASC;
BEGIN
--데이터를 메모리로 BIND(올림)
OPEN GAEDDONGI;
--작업 수행
--다음 행을 가리킴, 패출
FETCH GAEDDONGI INTO V_PROD, V_QTY;
DBMS_OUTPUT.PUT_LINE(V_PROD || ',' || V_QTY);
FETCH GAEDDONGI INTO V_PROD, V_QTY;
DBMS_OUTPUT.PUT_LINE(V_PROD || ',' || V_QTY);
FETCH GAEDDONGI INTO V_PROD, V_QTY;
DBMS_OUTPUT.PUT_LINE(V_PROD || ',' || V_QTY);
FETCH GAEDDONGI INTO V_PROD, V_QTY;
DBMS_OUTPUT.PUT_LINE(V_PROD || ',' || V_QTY);
FETCH GAEDDONGI INTO V_PROD, V_QTY;
DBMS_OUTPUT.PUT_LINE(V_PROD || ',' || V_QTY);

--데이터를 메모리에서 삭제
CLOSE GAEDDONGI;

END;
/

0개의 댓글