【问题标题】:write a function in pl/pgsql在 pl/pgsql 中写一个函数
【发布时间】:2017-12-20 11:40:32
【问题描述】:

这是我的查询。

select origindept, `count(am_course_name)` as total_course
from am_courseoffered
group by origindept;

我正在尝试创建一个将返回此查询的函数。

CREATE OR REPLACE  FUNCTION getcourse () 
 RETURNS TABLE (
course_origindept character varying,
course_ count(am_course_name) character varying
)
AS $$
BEGIN
 RETURN QUERY select origindept, count(am_course_name) as number_total_course
from am_courseoffered
group by origindept;
END; $$ 

LANGUAGE 'plpgsql';

我的函数有一些错误。

错误:“字符”处或附近的语法错误 第 4 行:course_count(am_course_name) 字符变化

我如何创建将返回此查询的函数。

【问题讨论】:

  • 我认为,您需要更具体一些。使用该函数会出现什么错误?
  • 为什么不查看?还是 SQL 函数?..
  • 为什么选择 PL/pgSQL?您也可以使用简单的 SQL 函数。另外:count 函数周围的那些反引号在 Postgres(或一般 SQL)中是无效的

标签: postgresql stored-procedures


【解决方案1】:

在我的脑海中,计数函数应该返回bigint 的数据类型,所以我认为将计数声明为varchar 会导致数据类型不匹配。这样的事情应该可以解决这个问题:

CREATE OR REPLACE  FUNCTION getcourse () 
RETURNS TABLE (
  course_origindept character varying,
  course_count bigint -- change here
) AS $$
BEGIN
  RETURN QUERY
  select origindept, count(am_course_name) as number_total_course
  from am_courseoffered
  group by origindept;
END;
$$ 
LANGUAGE plpgsql;

我不得不问,不过……这是理解函数的学术练习吗?用例有足够的问题,因为视图会更合适。

【讨论】:

  • 它不工作。当我运行这个函数时,它给出了一些错误
  • 错误:无法更改现有函数的返回类型。 DETAIL:OUT 参数定义的行类型不同。提示:首先使用 DROP FUNCTION getcourse()。
  • 您必须先删除旧功能,如提示所示。
  • 现在它给出了这个错误 ERROR: syntax error at or near "bigint" LINE 5: course_ count(am_course_name) bigint )
  • 您在编译或运行它时遇到该错误?我认为这不会是编译时错误
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-28
  • 1970-01-01
  • 2013-11-15
  • 2017-05-13
  • 2016-07-07
相关资源
最近更新 更多