[Oracle] PL/SQL - SELECT INTO
SQL> L
1 DECLARE
2 t_personnel PERSONNEL%ROWTYPE;
3 BEGIN
4 SELECT EMP_NAME, ADDRESS
5 INTO t_personnel.emp_name, t_personnel.address
6 FROM PERSONNEL
7 WHERE EMPNO='98002';
8
9 dbms_output.put_line('<<<조회결과>>>');
10 dbms_output.put_line(' 이름 : ' || t_personnel.emp_name);
11 dbms_output.put_line(' 주소 : ' || t_personnel.address);
12 EXCEPTION
13 WHEN NO_DATA_FOUND THEN
14 dbms_output.put_line('<<< ERROR >>>');
15 dbms_output.put_line(' 에러내용 : 조회된 데이타가 없습니다.!!');
16 WHEN TOO_MANY_ROWS THEN
17 dbms_output.put_line('<<< ERROR >>>');
18 dbms_output.put_line('에러내용 : 조회 데이타가 너무 많습니다.!!');
19 WHEN OTHERS THEN
20 dbms_output.put_line('<<< ERROR >>>');
21 dbms_output.put_line('에러코드 : ' || SQLCODE );
22 dbms_output.put_line('에러내용 : ' || SUBSTR(SQLERRM, 1, 100));
23* END;
SQL> /
<<<조회결과>>>
이름 : 이대명
주소 : 경기도 군포시 궁내동
PL/SQL 처리가 정상적으로 완료되었습니다.
SQL> L
1 declare
2 t_personnel PERSONNEL%ROWTYPE;
3 BEGIN
4 SELECT EMP_NAME, ADDRESS
5 INTO t_personnel.emp_name, t_personnel.address
6 FROM PERSONNEL;
7
8 dbms_output.put_line('<<<조회결과>>');
9 dbms_output.put_line('이름 : ' || t_personnel.emp_name );
10 dbms_output.put_line('주소 : ' || t_personnel.address);
11 EXCEPTION
12 WHEN NO_DATA_FOUND THEN
13 dbms_output.put_line('<<<ERROR>>>');
14 dbms_output.put_line('에러내용 : 조회된 데이타가 없습니다.');
15 WHEN TOO_MANY_ROWS THEN
16 dbms_output.put_line('<<<ERROR>>>');
17 dbms_output.put_line('에러내용 : 조회 데이타가 너무 많습니다.');
18 WHEN OTHERS THEN
19 dbms_output.put_line('<<<ERROR>>>');
20 dbms_output.put_line('에러코드 : ' || SQLCODE );
21 dbms_output.put_line('에러내용 : ' || SUBSTR(SQLERRM, 1, 100));
22* END;
SQL> /
<<<ERROR>>>
에러내용 : 조회 데이타가 너무 많습니다.
PL/SQL 처리가 정상적으로 완료되었습니다.
속성 |
결과값(조회 1건) |
결과값(조회 0건) |
비고 |
SQL%NOTROUND |
False |
True |
조회된 데이터가 없으면 True |
SQL%FOUND |
True |
False |
조회된 데이터가 있으면 True |
SQL%ROWCOUNT |
n |
0 |
조회된 데이터 건수 (row 수) |
SQL%ISOPEN |
False |
False |
PL/SQL은 실행한 후 바로 Implicit cursor를 닫기 때문에 항상 False로 평가됨 |
SQL> L
1 DECLARE
2 t_personnel PERSONNEL%ROWTYPE;
3 BEGIN
4 SELECT EMP_NAME, ADDRESS
5 INTO t_personnel.emp_name, t_personnel.address
6 FROM PERSONNEL
7 WHERE EMPNO='98002';
8
9 IF SQL%ROWCOUNT = 1 THEN
10 dbms_output.put_line('<<<조회결과>>>');
11 dbms_output.put_line('이름 : ' || t_personnel.emp_name);
12 dbms_output.put_line('주소 : ' || t_personnel.address);
13 ELSIF SQL%ROWCOUNT = 0 THEN
14 dbms_output.put_line('<<<ERROR>>>');
15 dbms_output.put_line('에러내용 : 조회된 데이타가 없습니다.');
16 ELSIF SQL%ROWCOUNT > 1 THEN
17 dbms_output.put_line('<<<ERROR>>>');
18 dbms_output.put_line('에러내용 : 조회 데이타가 너무 많습니다.');
19 END IF;
20
21 EXCEPTION
22 WHEN OTHERS THEN
23 dbms_output.put_line('<<<ERROR>>>');
24 dbms_output.put_line('에러코드 : ' || SQLCODE );
25 dbms_output.put_line('에러내용 : ' || SUBSTR(SQLERRM, 1, 100));
26 END;
27 /
<<<조회결과>>>
이름 : 이대명
주소 : 경기도 군포시 궁내동
PL/SQL 처리가 정상적으로 완료되었습니다.
'Database / Sql' 카테고리의 다른 글
[Oracle] ROWID 구성 (0) | 2013.01.03 |
---|---|
클러스터인덱스와 비클러스터인덱스 차이 (0) | 2013.01.03 |
[Oracle] 10g 공간 줄일수 있는 테이블 찾기와 Shrink 실행하기 (0) | 2012.12.03 |
[Oracle] PL/SQL PROCEDURE Scripts Sample 설명 (0) | 2012.11.27 |
[Oracle] Toad 실행계획 (0) | 2012.11.23 |