sql - 在 Postgresql 8.2 中编写函数

标签 sql function postgresql plpgsql

<分区>

我正在尝试在 Postgres 8.2 中编写一个函数,该函数将分析我们用于报告目的的数据集中的 4 个特定列,然后返回使用特定文本对记录进行分类的文本。

在我们旧的报告环境中,我会利用报告工具 (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;

最佳答案

您的函数需要一些格式和分号,但总的来说没问题。我还建议使用一些友好的格式,记住你是为人而不是为计算机编写代码:

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表达式就可以完成:

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摆弄查询

关于sql - 在 Postgresql 8.2 中编写函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18469861/

相关文章:

mysql - 对每个不存在值的 GROUP BY 进行 COUNT

javascript - 如何调用返回 block 中写入键值对的函数?

c++ - 如何将指针作为迭代器返回?

sql - 按最大限制的引用总和对对象进行分组

spring - 在 Spring Boot 应用程序中禁用表重新创建

mysql - SQL - 获取多个最接近的值

sql - BigQuery - 查找 N 个最近的向量

r - 从函数值有效地创建矩阵

python - Django 1.8.5 迁移根本不迁移到 Postgres 数据库

sql - 如何在 Golang 中缓存到不同 Postgres/MySQL 数据库的连接?