cursor express的一點測試!

warehouse發表於2008-01-04
[@more@]

SQL> create table t(id int , name varchar2(10) , salary number(10,2));

表已建立。

SQL> insert into t values(1 , 'a' , 1000);

已建立 1 行。

SQL> insert into t values(2 , 'b' , 2000);

已建立 1 行。

SQL> insert into t values(3 , 'c' , 3000)
2 ;

已建立 1 行。

SQL> commit;

提交完成。

--利用sys_refcursor定義的輸入ref cursor變數定義一個函式處理結果集之後才返回想要的結果

SQL> create or replace function f(p_result sys_refcursor)
2 return integer
3 is
4 v_salary number ;
5 v_id int;
6 v_count int default 0 ;
7 begin
8 loop
9 fetch p_result into v_id , v_salary ;
10 exit when p_result%notfound ;
11 if mod(v_id , 2) <>0 then
12 v_count := v_count + 1 ;
13 else
14 null ;
15 end if ;
16 end loop ;
17 return(v_count);
18
19 end ;
20 /

函式已建立。

SQL> select * from t a where f(cursor(select id , salary from t b
2 where a.id = b.id ))>0;

ID NAME SALARY
---------- ---------- ----------
1 a 1000
3 c 3000

--利用cursor express直接輸出結果

SQL> select cursor(select * from t where mod(id , 2)<>0) from dual;

CURSOR(SELECT*FROMTW
--------------------
CURSOR STATEMENT : 1

CURSOR STATEMENT : 1

ID NAME SALARY
---------- ---------- ----------
1 a 1000
3 c 3000

--直接取數
SQL> select * from t where mod(id ,2)<>0 ;

ID NAME SALARY
---------- ---------- ----------
1 a 1000
3 c 3000

SQL>

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/19602/viewspace-996438/,如需轉載,請註明出處,否則將追究法律責任。

相關文章