본문 바로가기
프로그래밍/Oracle

오라클 프로시저로 조회쿼리 돌리기

by 레다야 2007. 1. 24.
****************************************************************
* 이 포스트는 다른 사람의 블로그에서 가져왔습니다.                         *
* 출처는 생각 나질 않네요.. 혹시나 이 포스트에 작성자를                   *
* 알려주시면 출처를 밝히겠습니다.                                              *
****************************************************************




보통 일반적으로 저장 프로시저를 생성할 경우는 저장, 삭제, 수정등의 리턴 값이 없거나 하나의 행의 몇개의 컬럼을 받는 경우가 대부분입니다.

하지만 필요한 경우 커서를 사용합니다.

먼저 패키지를 만들고 그 패키지의 바디부분에 프로시저를 생성하여 Select 문을 돌린 내용을 커서에 담고 나중에 PACKAGE명.Procedure명으로 콜을 하는 방식으로 사용합니다.

아래에 예제...


-- 패키지 생성

CREATE OR REPLACE PACKAGE CTRefCursors AS

  TYPE rst_cursor IS REF CURSOR ;
  TYPE uom_cursor IS REF CURSOR ;

  Procedure QRYALLRSTYPE (io_cursor1 IN OUT rst_cursor);
  Procedure QRYGETALLUOM (io_cursor1 IN OUT uom_cursor);

END CTRefCursors;
/

-- 패키지 바디 생성

CREATE OR REPLACE PACKAGE BODY CTRefCursors AS
-- CTRunSheetType
    Procedure QRYALLRSTYPE (io_cursor1 IN OUT rst_cursor)
    IS
       u_cursor rst_cursor;
    BEGIN
          OPEN u_cursor FOR
          select REFID, RUNSHEETTYPE from CTRUNSHEETTYPE Order By REFID;

          io_cursor1 := u_cursor;
       END QRYALLRSTYPE;


-- CTuom
    Procedure QRYGETALLUOM (io_cursor1 IN OUT uom_cursor)
    IS
       u_cursor uom_cursor;
    BEGIN
          OPEN u_cursor FOR
          SELECT * from ctuom;

          io_cursor1 := u_cursor;
       END QRYGETALLUOM;
END  CTRefCursors;
/


'프로시저 실행
Public Function QryAllRSType() As OracleDataReader

  Dim myCommand As New OracleCommand("CTRefCursors.QRYALLRSTYPE", myConnection)
  myCommand.CommandType = CommandType.StoredProcedure

  Dim parameterRSType As New OracleParameter("io_cursor1", OracleType.Cursor)
  parameterRSType.Direction = ParameterDirection.Output
  myCommand.Parameters.Add(parameterRSType)

  myConnection.Open()
  Dim dr As OracleDataReader = myCommand.ExecuteReader(CommandBehavior.CloseConnection)

  Return dr

End Function

반응형

댓글