1

レポート目的で使用するデータセットから 4 つの特定の列を分析し、レコードを特定のテキストで分類するテキストを返す関数を Postgres 8.2 で作成しようとしています。

以前のレポート環境では、レポート ツール (Crystal Reports) を利用してこれを計算していましたが、データベース内の機能として実行する必要があるという指示がありました。

これが私がやろうとしていることの例です(エラーを許してください、私はまだ基​​本を学んでいます)

CREATE FUNCTION fnc_Breakdown(character varying, character varying, character varying, character varying)  
RETURNS character varying AS $$
DECLARE
breakdown character varying; 
BEGIN
IF $1 in ('ABCD') THEN breakdown:= "CSS"
ELSE
IF $1 like ('DCA%) AND $2 IN ('District 123','District 124') and $3 IN ('
THEN breakdown:= "FAB"
ELSE breakdown:= "OTHERS"
END IF;
RETURN breakdown;
END;

$$ LANGUAGE plpgsql IMMUTABLE;
4

1 に答える 1

0

関数には書式設定とセミコロンが必要ですが、一般的には問題ありません。また、わかりやすい書式設定をお勧めします。コンピューター向けではなく、人向けのコードを書いていることを思い出してください。

create or replace function fnc_Breakdown
(
  character varying,
  character varying,
  character varying,
  character varying
)
returns character varying as $$
declare
  breakdown character varying; 
begin
  if $1 = 'ABCD' then
    breakdown := 'CSS';
  elseif $1 like 'DCA%' and $2 in ('District 123','District 124') then
    breakdown:= 'FAB';
  else
    breakdown:= 'OTHERS';
  end if;
  return breakdown;
end;
$$ language plpgsql immutable;

実際には、このような単純なタスクは、関数をまったく使用せずに、ケース式だけで作成できます。

case
    when a = 'ABCD' then
        'CSS'
    when a like 'DCA%' and b in ('District 123','District 124') then
        'FAB'
    else
        'OTHERS'
end

sql fiddle demoクエリをいじるを参照してください

于 2013-08-27T16:06:03.523 に答える