當前位置:編程學習大全網 - 源碼下載 - oracle的函數返回壹個表怎麽寫

oracle的函數返回壹個表怎麽寫

Oracle?需要通過?返回壹個遊標來處理。

--?測試表數據。

select?*?from?test_main;

ID?VALUE

----------?--------------------

1?ONE

3?THREE

2?TWO

--?返回結果集的函數.

CREATE?OR?REPLACE?FUNCTION?Get_Test_Main_All

RETURN?SYS_REFCURSOR

IS

return_cursor?SYS_REFCURSOR;

BEGIN

OPEN?return_cursor?FOR?'SELECT?*?FROM?test_main';

RETURN?return_cursor;

END;

/

--?普通的查詢,來查看結果.

SELECT?Get_Test_Main_All()?FROM?dual;

GET_TEST_MAIN_ALL()

--------------------

CURSOR?STATEMENT?:?1

CURSOR?STATEMENT?:?1

ID?VALUE

----------?--------------------

1?ONE

3?THREE

2?TWO

--?存儲過程調用,?來獲取結果.

DECLARE?

--?調用函數的返回值.

testCursor?SYS_REFCURSOR;

--?存儲單行數據.

testRec?test_main%ROWTYPE;

BEGIN

--?調用返回結果集的函數.

testCursor?:=?Get_Test_Main_All();

--?循環,遍歷結果.

LOOP

--?遊標向前.

FETCH?testCursor?INTO?testRec;

--?無數據的情況下,退出循環.

EXIT?WHEN?testCursor%NOTFOUND;

--?輸出調試信息.

dbms_output.put_line(?TO_CHAR(testRec.id)?||?'?'?||?testRec.value);

END?LOOP;

END;

/

1?ONE

3?THREE

2?TWO

PL/SQL?過程已成功完成。

--------------------------------------------------------------------------------

上面的是使用動態SQL處理的。

下面是正常SQL處理的。

CREATE?OR?REPLACE?FUNCTION?Get_Test_Main?

RETURN?SYS_REFCURSOR

IS

return_cursor?SYS_REFCURSOR;

BEGIN

OPEN?return_cursor?FOR?SELECT?*?FROM?test_main;

RETURN?return_cursor;

END;

/

SQL>?SELECT?Get_Test_Main()?FROM?dual;

GET_TEST_MAIN()

--------------------

CURSOR?STATEMENT?:?1

CURSOR?STATEMENT?:?1

ID?VALUE

----------?--------------------

2?TWO

--------------------------------------------------------------------------------

上面的是沒有參數的

下面是有參數的

CREATE?OR?REPLACE?FUNCTION?Get_Test_Main?(

p_id?INT

)

RETURN?SYS_REFCURSOR

IS

return_cursor?SYS_REFCURSOR;

BEGIN

OPEN?return_cursor?FOR?SELECT?*?FROM?test_main?WHERE?id?=?p_id;

RETURN?return_cursor;

END;

/

SQL>?SELECT?Get_Test_Main(2)?FROM?dual;

GET_TEST_MAIN(2)

--------------------

CURSOR?STATEMENT?:?1

CURSOR?STATEMENT?:?1

ID?VALUE

----------?--------------------

2?TWO

返回遊標的函數,不是?“表值函數”

SQL>?SELECT?*?FROM?Get_Test_Main(2);

SELECT?*?FROM?Get_Test_Main(2)

*

ERROR?位於第?1?行:

ORA-00933:?SQL?命令未正確結束

  • 上一篇:實驗室“胡蘿蔔素植物色素的分離測定”
  • 下一篇:Java評估系統源代碼
  • copyright 2024編程學習大全網