1) Package Header Cursor
1@@@@Packaged Cursors There are two kind case in package header declare cursor: 1..declare the explicitly cursor with SELECT statment 2..declare the explicitly cursor only without SELECT statment however, you need assign the RETURN rowtype is the SELECT statment which in package body. I can declare a cursor in a package, in either the body or the specification. The state of this cursor (i.e., whether it is opened or closed, the pointer to the location in the result set) persists for the session, just like any other packaged data. This means that it is possible to open a packaged cursor in one program, fetch from it in a second, and close it in a third. Declaring packaged cursors If you declare only the header, then you must add a RETURN clause to a cursor definition that indicates the data elements returned by a fetch from the cursor. Of course, these data elements are actually determined by the SELECT statement for that cursor, but the SELECT statement appears only in the body, not in the specification. @@@Example: Cursor in Package SYS@ocm> !cat tmp.sql DROP TABLE books / CREATE TABLE books ( author VARCHAR2(100) , title VARCHAR2(250) , page_count NUMBER(5) , CONSTRAINT pk_books PRIMARY KEY (author,title) ) / BEGIN DELETE FROM books; INSERT INTO books VALUES('fatpander_small_one','Fatpander Travel',100); INSERT INTO books VALUES('fatpander_big_one','Fatpander Travel',120); COMMIT; END; / CREATE OR REPLACE PACKAGE book_info IS --A cursor with SELECT statement. CURSOR byauthor_cur ( author_in IN books.author%TYPE ) IS SELECT * FROM books WHERE author = author_in; --A cursor without SELECT statment, but need a RETURN keyword --, which return rowtype in SELECT statment in the package body CURSOR bytitle_cur ( title_filter_in IN books.title%TYPE ) RETURN books%ROWTYPE; --This type for creating a collection to cache below cursor TYPE author_summary_rt IS RECORD ( author books.author%TYPE , total_page_count PLS_INTEGER , total_book_count PLS_INTEGER ); CURSOR summary_cur ( author_in IN books.author%TYPE ) RETURN author_summary_rt; PROCEDURE display ( book_rec IN books%ROWTYPE); END; / SYS@ocm> @tmp.sql Table dropped. Table created. PL/SQL procedure successfully completed. Package created. @@@Implement the package body SYS@ocm> !cat tmpx.sql CREATE OR REPLACE PACKAGE BODY book_info IS --Implement the cursor in package specification --which no SELECT statement, only with RETURN. CURSOR bytitle_cur ( title_filter_in IN books.title%TYPE) RETURN books%ROWTYPE IS SELECT * FROM books WHERE title LIKE title_filter_in; CURSOR summary_cur ( author_in IN books.author%TYPE ) RETURN author_summary_rt IS SELECT author, SUM(page_count), COUNT(*) FROM books WHERE author = author_in; PROCEDURE display ( book_rec IN books%ROWTYPE ) IS BEGIN NULL; END; END book_info; / SYS@ocm> @tmpx.sql Package body created.
Package Header Cursor
发布日期:2025-05-01 12:26:17
浏览次数:2
分类:技术文章
本文共 2904 字,大约阅读时间需要 9 分钟。
转载于:https://blog.51cto.com/majesty/1107616
发表评论
最新留言
很好
[***.229.124.182]2025年04月06日 10时37分45秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!