1. 문제 1 (478P)


Q1)
1)
--1) 내가 한 것
DECLARE
V_EMP_ROW EMP%ROWTYPE;
CURSOR c1 IS
SELECT EMPNO, ENAME, JOB, SAL, DEPTNO
FROM EMP;
BEGIN
OPEN c1 ;
LOOP
FETCH c1 INTO V_EMP_ROW;
EXIT WHEN c1%NOTFOUND;
DBMS_OUTPUT.PUT_LINE
('EMPNO : ' || V_EMP_ROW.EMPNO ||
'ENAME : ' || V_EMP_ROW.ENAME ||
'JOB : ' || V_EMP_ROW.JOB ||
'SAL : ' ||V_EMP_ROW.SAL ||
'DEPTNO : ' || V_EMP_ROW.DEPTNO );
END LOOP;
CLOSE C1;
END;
/

--1) 정답
--SELECT 문이 이상했음
DECLARE
V_EMP_ROW EMP%ROWTYPE;
CURSOR c1 IS
SELECT * FROM EMP;
BEGIN
OPEN c1 ;
LOOP
FETCH c1 INTO V_EMP_ROW;
EXIT WHEN c1%NOTFOUND;
DBMS_OUTPUT.PUT_LINE
(' EMPNO : ' || V_EMP_ROW.EMPNO ||
' ENAME : ' || V_EMP_ROW.ENAME ||
' JOB : ' || V_EMP_ROW.JOB ||
' SAL : ' ||V_EMP_ROW.SAL ||
' DEPTNO : ' || V_EMP_ROW.DEPTNO );
END LOOP;
CLOSE C1;
END;
/

2)
--2) FOR LOOP 방식
--SELECT * FROM 을 입력안한 것이 실수
--FOR LOOP는 LOOP가 자동으로 입력이 되기 때문에 굳이 OPEN 문 안해도 됨
--애초에 생략하기 위해 쓴 것이기에
DECLARE
CURSOR c1 IS
SELECT * FROM EMP;
BEGIN
FOR c1_rec IN c1 LOOP
DBMS_OUTPUT.PUT_LINE
(' EMPNO : ' || c1_rec.EMPNO ||
' ENAME : ' || c1_rec.ENAME ||
' JOB : ' || c1_rec.JOB ||
' SAL : ' ||c1_rec.SAL ||
' DEPTNO : ' || c1_rec.DEPTNO );
END LOOP;
END;
/

Q2)
--날짜 표기법은 날짜를 문자형태로 바꾸는 형식이 필요함
--TO_CHAR가 왜 필요한가
DECLARE
v_wrong DATE;
BEGIN
SELECT ENAME INTO v_wrong
FROM EMP
WHERE EMPNO = 7369;
DBMS_OUTPUT.PUT_LINE ('예외가 발생하면 다음 문장은 실행되지 않습니다');
EXCEPTION
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE ('오류가 발생하였습니다.'|| TO_CHAR(SYSDATE, '[""YYYY"년"MM"월"DD"일" HH24"시"MI"분"SS"초"]'));
DBMS_OUTPUT.PUT_LINE ('SQLCODE : ' || TO_CHAR(SQLCODE));
DBMS_OUTPUT.PUT_LINE ('SQLERRM : ' || SQLERRM );
END;
/

728x90
반응형
LIST
'개인공부 정리 > 문제풀이' 카테고리의 다른 글
CP12 ~ CP15 문제 풀이(수정중) (0) | 2023.02.17 |
---|---|
CP3 ~ CP5 문제 풀이 (0) | 2023.02.16 |
0209 오라클 DB 문제풀이 - PL/SQL, 커서와 예외처리 (0) | 2023.02.09 |
0208 오라클 DB 문제풀이 - 제약 조건 및 사용자, 권한, 롤 관리 (0) | 2023.02.08 |
0207 오라클 DB 문제풀이 - 데이터 정의어, 객체 종류, 제약 조건 (0) | 2023.02.07 |