ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [ORACLE] 매개변수가 있는 프로시저
    DATABASE 2018. 12. 3. 16:07


    ■   매개변수가 있는 프로시저


    CREATE OR REPLACE PROCEDURE 프로시저명 ( 매개변수컬럼명  IN 타입형 )

    IS

    선언


    BEGIN


    작업


    ( + 예외처리 )


    END;


    □   예시


    ▶▶LOOP문 ( 각 컬럼 선언 )


    create or replace procedure p_appart(


    m_apgrade IN IV_APPART.apgrade%TYPE   %TYPE : 해당 테이블의 컬럼 타입과 동일하게

    )

    is

    v_apno IV_APPART.APNO%TYPE; 

    v_apdiv IV_APPART.APDIV%TYPE;

    v_apdept IV_APPART.APDEPT%TYPE;

    v_appfield IV_APPART.APPFIELD%TYPE;

    v_apgrade IV_APPART.APGRADE%TYPE;


    CURSOR 선언


    CURSOR p_cursor IS      

    select apno, apdiv, apdept, appfield, apgrade from IV_APPART where apgrade = m_apgrade;


    begin


    OPEN p_cursor;


    LOOP


    FETCH p_cursor INTO v_apno, v_apdiv, v_apdept, v_appfield, v_apgrade;


    EXIT WHEN p_cursor%NOTFOUND; 


    %NOTFOUND: 행이 남아 있지 않은 경우 TRUE / 행이 남아 있는 경우 FALSE

                        -> 행이 남아 있지 않은 경우에 LOOP 빠져나온다.


    DBMS_OUTPUT.PUT_LINE(v_apno||'==='||v_apdiv||'==='||v_apdept||'==='||v_appfield||'==='||v_apgrade);


    END LOOP;


    CLOSE p_cursor;


    end;


    ▶▶LOOP문 ( 컬럼 통합 선언 )


    create or replace procedure p_appart(


    m_apgrade IN IV_APPART.apgrade%TYPE

    )

    is

    DATA IV_APPART%ROWTYPE  %ROWTYPE : 해당 테이블의 컬럼들 타입과 동일하게


    CURSOR p_cursor is

    select * from IV_APPART where apgrade = m_apgrade;


    begin


    OPEN p_cursor;


    LOOP

    FETCH p_cursor INTO DATA;

    EXIT WHEN p_cursor%NOTFOUND;

    DBMS_OUTPUT.PUT_LINE(DATA.apno||'==='||DATA.apdiv||'==='||DATA.apdept||'==='

    ||DATA.appfield||'==='||DATA.apgrade);

    END LOOP;


    CLOSE p_cursor;


    end;



    ▶▶FOR문


    create or replace procedure p_appart (


    v_apgrade IN IV_APPART.apgrade%TYPE    

    )

    is

    CURSOR p_cursor IS 


    select apno, apdiv, apdept, appfield, apgrade from IV_APPART where apgrade = v_apgrade;


    begin


    FOR p_list IN p_cursor LOOP


    DBMS_OUTPUT.PUT_LINE(p_list.apno||'==='||p_list.apdiv||'==='||p_list.apdept||'==='||p_list.appfield||'==='||p_list.apgrade);


    END LOOP;


    FOR 사용시

    커서의 OPEN FETCH CLOSE가 자동발생하며 

    레코드의 이름 또한 자동 선언되므로 따로 기술할 필요가 없다.



    EXCEPTION 예외처리


    when NO_DATA_FOUND then

    DBMS_OUTPUT.PUT_LINE('예외처리: 해당 데이터가 없습니다.');


    end;

















    'DATABASE' 카테고리의 다른 글

    [ORACLE] 특정문자의 개수 알아보기  (0) 2018.12.18
    [MYSQL] SUBSTRING_INDEX 문자열 자르기  (0) 2018.12.13
    [ORACLE] CURSOR 커서  (0) 2018.11.30
    [ORACLE] TIMESTAMP 활용 (데이터복구)  (0) 2018.11.29
    [ORACLE] LISTAGG함수  (0) 2018.11.06

    댓글

Designed by Tistory.