0

アプリケーションにページングを実装したいと考えています。出力パラメーターとしてレコード数を返すストアド プロシージャを作成し、ref カーソル データ自体 (制限とオフセットを含む) を作成しまし

私が理解している限り、out "_count" bigintに対して文句を言います。

同じストアド プロシージャからoutパラメータと ref カーソルを返す場合はあり ますか?

  CREATE OR REPLACE FUNCTION aggr."GetPromotionsFull"("_limit" bigint, "_offset" bigint, out "_count" bigint)
  RETURNS refcursor AS   
$BODY$
DECLARE
      ref refcursor;    
BEGIN   

select count(1) into "_count" from aggr."Promotion" t 
inner join aggr."Company" c on t."CompanyId"=c."Id"  
   where 
   t."isDeleted"=false
  and c."isDeleted"=false;


  OPEN ref FOR
  SELECT t."Id",
  t."CompanyId",
  t."PromoName",
  t."Description",
  t."Url",
  t."ImgPath",
  t."CreatedDate",
  t."IsEnabled",
  t."isDeleted",
  c."Name"as "CompanyName"
  FROM aggr."Promotion" t
  inner join aggr."Company" c on t."CompanyId"=c."Id"  
   where 
   t."isDeleted"=false
   and c."isDeleted"=false
   limit "_limit" offset "_offset";

    RETURN ref;     
END
$BODY$
  LANGUAGE plpgsql VOLATILE
4

1 に答える 1

3

1 つの OUT 変数を使用する場合、結果の型は OUT 変数と同じ型である必要があります。複数の値を返したい場合は、より多くの OUT 変数を使用する必要があり、結果の型は RECORD にするか、RETURNING 部分を無視できます。

現代の PostgreSQL は、あなたがしたことを許可しません:

postgres=# CREATE OR REPLACE FUNCTION fx(OUT a int) 
RETURNS numeric AS $$ select 10$$ 
LANGUAGE sql;
ERROR:  function result type must be integer because of OUT parameters

ただし、次のことを行う必要があります。

postgres=# CREATE OR REPLACE FUNCTION fx(OUT a int, OUT b numeric)
AS $$ select 10, 20.1$$ 
LANGUAGE sql;
CREATE FUNCTION

注: OFFSET LIMIT を使用したページ付けは最善の方法ではありません。http://use-the-index-luke.com/sql/partial-results/fetch-next-page を参照してください

于 2015-05-11T14:51:14.593 に答える