2013-02-18 74 views
0

我試圖將oracle過程遷移到postgresql函數。這裏是postgres中的函數:postgresql中的函數參考光標

CREATE OR REPLACE FUNCTION tibrptsassure.call_reasons(i_start_date date, i_end_date date, i_intnbr character varying, i_intmodnbr character varying, oc_ref_cursor refcursor) 
    RETURNS refcursor AS 
$BODY$ 
BEGIN 
     OPEN oc_ref_cursor FOR 
     SELECT COUNT(1),INTERACTION_NBR,INTERACTION_ID,INTERACTION_MODULE_NBR,CREATED_BY 
     FROM tibrptsassure.d_tcare_interaction , tibrptsassure.d_calendar d 
     WHERE INTERACTION_ID = i_intnbr 
     AND INTERACTION_MODULE_NBR = i_intmodnbr AND INTERACTION_DATE BETWEEN i_start_date AND i_end_date 
     AND INTERACTION_DATE BETWEEN d.week_start_date AND d.week_end_date 
     GROUP BY INTERACTION_NBR; 
return oc_ref_cursor; 
END; 
$BODY$ 
LANGUAGE plpgsql VOLATILE 

但是,當執行此函數時,我得到任何輸出。有一條消息:丟棄1行的查詢結果。

begin; 
select tibrptsassure.sampleproc_call('10-Feb-2010','31-Dec-2013','30681','Bypass_IDV','funccursor'); 
FETCH ALL IN "funccursor" ; 
COMMIT; 

哪些錯誤的查詢?

+0

你可以用'tibrptsassure.sampleproc_call()'來操作,但是你保留那個和你的PostgreSQL版本一樣的祕密? – 2013-02-18 11:19:44

+0

我只用了tibrptsassure.call_reasons()。我使用PgAdmin版本1.14.1。 – Nancy 2013-03-13 11:42:20

+0

pgAdmin只是GUI。 PostgreSQL的版本是相關的。針對數據庫運行'SELECT version()'。 – 2013-03-13 14:59:47

回答

0

這是pgAdmin和多語句事務的問題。改用psql。

基本上pgAdmin不知道該怎麼做,所以它放棄了這一行,你不能在這樣的環境之外使用遊標。

+0

感謝Erwin Brandstetter和Chris Travers。 – Nancy 2013-05-21 12:21:07