您尝试使用的语法对Postgres而言是陌生的。
您的代码比需要的复杂得多。使用一个简单的SQL函数:
CREATE OR REPLACe FUNCTION get_details_for_widget(widgetid integer) RETURNS TABLE (id int, contact_id int, priority int, contact text)$func$ SELECT d.id, d.contact_id, d.priority, o.contact FROM widget_details d JOIN widget_owner o ON o.id = d.contact_id WHERe d.rid = widgetid -- where does widgetid come from? AND d.active_yn = 't' ORDER BY d.priority$func$ LANGUAGE sql
如此简单的功能根本不需要plpgsql。请改用普通的SQL函数。
定义一个 临时排式 带
RETURNS TABLE()。由于您没有提供表定义,因此我临时使用了列类型。这同样适用于plpgsql函数。
还:
使用适当的
JOIN
条件以获得更好的可读性。使用表别名简化查询。
将数据类型
boolean
用于widget_details.active_yn
。
如评论中所阐明的,它已经是一个布尔列。我建议使用
TRUE/
FALSE代替字符串文字’t’/’f’进行数据输入-
引用有关布尔类型的手册:
关键字
TRUE和FALSE是首选(与SQL兼容)的用法。
在
WHERe子句中,每个表达式都将求值为
boolean结果。
TRUE合格
FALSE或不合格
NULL。因此,对于
boolean类型,您可以简化:
AND d.active_yn = TRUE
只是:
AND d.active_yn
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)