Jason ---分享,共同進步

          激情成就夢想,努力創造未來
          隨筆 - 53, 文章 - 1, 評論 - 45, 引用 - 0
          數據加載中……

          postgresql record 使用

          今天在做postgresql 存儲過程的時候,遇到了一個問題,找了好多資料沒有解決,最后經過思考終于解決了

          創建一個存儲過程

          CREATE OR REPLACE FUNCTION test(OUT name character varying, OUT _cur refcursor )
            
          RETURNS record AS
          $BODY$
          DECLARE
              _geom geometry;
          BEGIN
            name 
          = '11';
            
          open _cur  for   SELECT id,name FROM test_tab;
            
          --id ='222'; 
          END;
          $BODY$
            LANGUAGE 
          'plpgsql' VOLATILE
            COST 
          100;
          ALTER FUNCTION test() OWNER TO pg;

          就是上面這個存儲過程,我需要調用這個存儲過程得到輸出(返回的參數)。

          文檔中這樣描述的:

          記錄類型(record):

          紀錄變量類似行類型變量,但是它們沒有預定義的結構。 它們在SELECT或者FOR命令中獲取實際的行結構。 一個行變量的子結構可以在每次賦值的時候改變。 這樣做的一個結果是:在一個記錄變量被賦予數值之前,它沒有子結構, 并且任何對其中的數據域進行訪問的企圖都將產生一個運行時錯誤。

          請注意 RECORD 不是真正的數據類型,只是一個占位符。 我們還應該意識到在把一個 PL/pgSQL 函數聲明為返回record類型的時候, 它和一個記錄變量的概念并不完全相同,即使這個函數可能使用一個記錄變量保存它的結果也如此。 在兩種情況下,在書寫函數的時候,實際的行結構都是不知道的,但是對于返回 record 的函數來說, 實際的結構是在調用它的查詢被分析的時候決定的,而行變量可以在運行中改變其行結構。


          使用方法:如獲得上面函數的返回結果
          select ok.name,ok._cur from test() as ok(name character varying,_out refcursor)

          但是這樣會報錯誤

          ERROR:  a column definition list is only allowed for functions returning "record"

          解決方法:
          直接使用函數名稱+"."的方式解決
          select test.name,test._cur from test()

          posted on 2009-04-08 19:12 agun 閱讀(5682) 評論(0)  編輯  收藏 所屬分類: 數據庫

          主站蜘蛛池模板: 盐边县| 灵宝市| 吴桥县| 邮箱| 遂川县| 石渠县| 斗六市| 治多县| 资中县| 万盛区| 赣州市| 哈尔滨市| 祁东县| 牡丹江市| 三都| 南宁市| 长葛市| 昭苏县| 南昌市| 中卫市| 连云港市| 孟村| 调兵山市| 梧州市| 龙胜| 商都县| 郴州市| 梁河县| 疏勒县| 锡林浩特市| 河池市| 册亨县| 贡觉县| 六盘水市| 长顺县| 渝中区| 望江县| 灌南县| 通榆县| 东乡族自治县| 唐山市|