* 이 포스트는 다른 사람의 블로그에서 가져왔습니다. *
* 출처는 생각 나질 않네요.. 혹시나 이 포스트에 작성자를 *
* 알려주시면 출처를 밝히겠습니다. *
****************************************************************
보통 일반적으로 저장 프로시저를 생성할 경우는 저장, 삭제, 수정등의 리턴 값이 없거나 하나의 행의 몇개의 컬럼을 받는 경우가 대부분입니다.
하지만 필요한 경우 커서를 사용합니다.
먼저 패키지를 만들고 그 패키지의 바디부분에 프로시저를 생성하여 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
'프로그래밍 > Oracle' 카테고리의 다른 글
[Trouble/Shooting] Listener.log 파일이 비약적으로 커질 경우 해결 방안 (0) | 2009.03.05 |
---|---|
Oracle에서 Text File 만들기 (2) | 2007.08.14 |
오라클 프로세스 실행 방법 (0) | 2007.08.13 |
댓글