2020年9月17日 星期四

在oracle中建置一個回傳select的function

在oracle中建置一個回傳select的function

tags: oracle

在mssql中,要弄一個回傳select的function或stored procedure好像是一件非常簡單的事,只要在文末下一個select就回傳了。

不過在oracle好像不是這麼一回事,需要不少步驟,這邊僅記錄個人能夠成功的步驟,但是已經有點忘了當初參考的出處,如有雷同部份再請告知,讓在下可以標註參考來源。

首先,建立一個參照的物件

-- 建立一個參照物件
CREATE OR REPLACE TYPE NOTES_OBJ_EOD_MLIST AS OBJECT ( 
    MATNR VARCHAR2(54),
    MTIDX VARCHAR2(54),
    IDNRK VARCHAR2(54),
    FERTH_LBR VARCHAR2(54),
    FERTH_LED VARCHAR2(54)

  ); 

接下來,建立一個暫存表,命名習慣上我會直接在參照物件後面加上一個TEMP,看個人喜好

CREATE TYPE NOTES_OBJ_EOD_MLIST_TEMP AS TABLE OF NOTES_OBJ_EOD_MLIST;  

然後建立你的function

-- 建立FUNCTION
create or replace function NOTES_FUNC_EOD_MLIST(YOUR_PARAMETERS) return NOTES_OBJ_EOD_MLIST_TEMP pipelined AS
BEGIN
    FOR cur IN (        
        SELECT MATNR, MTIDX, IDNRK, FERTH_LBR, FERTH_LED FROM YOUR_TABLE
    ) -- END cur
    LOOP  -- return date
        PIPE ROW(NOTES_OBJ_EOD_MLIST(cur.MATNR,
                                    cur.MTIDX,
                                    cur.IDNRK,
                                    cur.FERTH_LBR,
                                    cur.FERTH_LED
                                    )
        );
    END LOOP;

    RETURN;

END;

第1行:要特別注意到,最後的return是你的暫存表,並且加上pipelined
第3行:把你的select用一個for cur in包住,其中cur你可以自己用你自己的命名
第6行:用loop end loop包住預計回傳的資料
第7行:用pipe row(你建立的參照物件(欄位))來處理要回傳的資料

最後只要再return,就可以成功弄一個可以回傳select的function

使用方法也很簡單,見下範例:

select * from table(your_function(parameter, if have))

2020年5月29日 星期五

淘寶私人集運-台灣速運

這次的淘寶520活動因為要買不少的傢俱,所以開始找私人集運,比了不少,最後使用台灣速運(連結含有推廣碼)。

主要使用有幾個原因:
1. 系統化(這是最主要的)
2. 價格透明
3. 客服快速
4. 付款多元

目前台灣速運新人加入會送十張5元折扣卷,每次消費可用一張,我目前只有使用海快,所以只能分享海快的心得:
1. 首重22元
2. 續重8.5元/公斤
3. 超過100公斤,續重為8元/公斤
4. 材積重量為長x寬x高/12000,與實際重量兩者取大
5. 包稅2元/公斤

系統化的介面可以讓我們快速的瞭解目前的產品入倉狀況,不用一直詢問客服等資料回覆:

而且入庫之後會直接把重量、材積重量算給你,只是要注意的到,材積重量預設是空運的,所以會比較貴一點(除6000),而且重量的部份還會有照片給你看。

訂單資訊你也可以直接自己在系統上查詢:

我三張訂單就三種付款模式,他也可以直接新台幣付款,只是因為匯率不好,所以後來就請朋友幫忙用支付寶付款。

等實際拿到貨物再來看貨運的保存狀況好不好,希望我的人品是好的。對了,上面都是人民幣計價,不要誤會了喔。

貨運的狀態變化大概是下圖這樣: