2020년/정처기

[2020 정보처리기사 실기]Section 08.SQL응용(사용자 정의 함수, 커서)

위지원 2020. 4. 29. 22:32

이전글

2020/04/29 - [2020년도 상반기/정처기] - [2020 정보처리기사 실기]Section 08.SQl응용(프로시저, 트리거)

사용자 정의 함수

  • select를 통한 조회만 할 수 있음 ,DML문의 호출에 의해 실행
  • return으로 값을 반환하므로 출력 파라미터가 존재하지 않음
DECLARE
BEGIN
    [CONTROL]
    [SQL]
    [EXCEPTION]
    [RETURN]
END;

 

1. 사용자 정의 함수 생성 ; BODY에는 적어도 하나의 SQL문이 존재해야함

CREATE [OR REPLACE] FUNCTION 사용자 정의 함수명(파라미터)
[지역변수]
BEGIN
     사용자 정의 함수 BODY;
     RETURN 반환값;
END;
CREATE FUNCTION Get_S_성별(i_성별코드 IN INT)
RETURN VARCHAR2
IS
BEGIN
    IF i_성별코드 =1 THEN
        RETURN '남자';
    ELSE 
        RETURN '여자';
    END IF;
END;

 

2. 사용자 정의 함수 실행

SELECT 사용자 정의 함수명 FROM 테이블명;
INSERT INTO 테이블명(속성명) VALUES (사용자 정의 함수명);
DELETE FROM 테이블명 WHERE 속성명 = 사용자 정의 함수명;
UPDATE 테이블명 SET 속성명 = 사용자 정의 함수명;

#EXAMPLE

/*Table 사원(이름, 성별코드) */
SELECT 이름, Get_S_성별(성별코드) FROM 사원;

 

3. 사용자 정의 함수 제거

DROP FUNCTION 사용자 정의 함수명;

#EXAMPLE

DROP FUNCTION Get_S_성별;

 

커서(Cursor)

1.커서

쿼리문의 처리 결과가 저장되어 있는 메모리 공간을 가르키는 포인터

  • 묵시적 커서 : 커서 수행 단계가 자동으로 수행, 쿼리문의 정상 수행여부를 확인하기 위함
    • 커서의 속성
      • SQL%FOUND : true/false
      • SQL%NOTFOUND : true/false
      • SQL%ROWCOUNT : row개수
      • SQL%ISOPEN : true/false 묵시적 커서는 자동이라 항상 false
BEGIN
	UPDATE SCROE SET COND=25 WHERE DEPT = 'PR';
	DBMS_OUTPUT.PUT_LINE(SQL%ROWCOUNT);
END;

출력 결과 => 3

  • 명시적 커서 : 사용자가 직접 구현, 쿼리문의 결과를 저장하여 사용해 동일한 쿼리가 반복수행 되어 리소스 낭비를 방지함
DECLARE 
    p_name employee.name%TYPE /*name속성의 자료형과 동일한*/
    CURSOR cur_name(ff Int)
    IS
    SELECT name FROM employee where id >= tt;
    
BEGIN 
    OPEN cur_name(20);
    LOOP
        FETCH cur_name INTO p_name; /*커서 결과를 p_name에 뻈찌*/
        EXIT WHEN cur_name%NOTFOUND;
        DBMS_OUTPUT.PUT_LINE(p_name);
    END LOOP;
    CLOSE cur_name;
END;

 

즐거운 SQL이 끝났습니다.. 다음시간엔 또,,,개발,,,환ㄱ,,경,,구,,축,,,으로 찾아뵙겠읍니다,,,,아,, 하기싫다,,, 시험,,까지,,,20일가량,,남았네요,,젭알,,한번에 붙허라,,

 

 

다음글

2020/05/05 - [2020년도 상반기/정처기] - [2020 정보처기기사 실기] Section 09. 소프트웨어 개발 보안 구축 #1