第一個遇到的難題就是要幫別人看 PL/SQL ,
但是我根本不會寫呀!
自從二技那堂 Oracle 的學分之後我就再也沒有摸過了,
連書都送別人了!可見我多麼有自信不會再摸到 Oracle 呀!
可是上天是愛捉弄人的!
anyway, 現在要弄得就是寫一個STORE PROCEDURE\FUNCTION 回傳一個 TABLE,
本來覺得這根本是天殺的簡單呀!
沒想到小朋友寫出來的卻是回傳一個 CURSOR !!!這是甚麼東!
結果才發現這邊的人居然沒有寫過這樣的東西,
還質疑說 Oracle 可以這樣子嗎?這問倒我了,我哪知道呀~~~
所以我就東查西查的,還問了阿輝仔!
原來 Oracle 真的不能直接回傳 SELECT * FROM xxx_table 這樣!
不過可以用間接的方式,往下看吧!
首先要先宣告你要回傳的 List Array 的 OBJECT:
CREATE TYPE O_GROUP AS OBJECT
(GROUP_ID VARCHAR2(8),
GROUP_NAME VARCHAR2(30));
然後接下來在將這個 OBJECT 轉成 TABLE:
GREATE TYPE GROUP_LIST AS TABLE OF O_GROUP;
然後就可以開始寫 Function 啦!如下:
CREATE OR REPLACE FUNCTION GET_GROUP_LIST
RETURN GROUP_LIST AS
v_ResultSet GROUP_LIST := GROUP_LIST();
CURSOR c_GROUP_TABLE IS
SELECT GROUP_ID,
GROUP_NAME
FROM GROUP_TABLE
ORDER BY GROUP_ID;
BEGIN
FOR v_Rec IN c_GROUP_TABLE LOOP
v_ResultSet.EXTEND;
v_ResultSet(v_ResultSet.LAST) := O_GROUP(v_Rec.GROUP_ID,
v_Rec.GROUP_NAME);
END LOOP;
RETURN v_ResultSet;
END GET_GROUP_LIST;
簡單的說就是回傳我們定義的 Table ,
然後用 cursor 的方式把資料塞進去。
最後就可以直接使用啦!
SELECT * FROM TABLE(GET_GROUP_LIST());
沒想到在 MS SQL SERVER 中那麼簡單的事情來到了 Oracle 一切都變得不簡單了!
最後感謝阿輝伯在放假中還回答我問題!
MGM_GROUP 是什麼東西啊?
回覆刪除我沒看到你有宣告耶~
應該是 O_GROUP 啦
刪除