2012. 12. 21. 11:07

[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 처리가 정상적으로 완료되었습니다.