PostgreSQL数据库存储过程

PostgreSQL数据库存储过程,postgresql,Postgresql,在postgresql数据库中创建存储过程getoperatordetails 在另一个存储过程中获取这三个参数,但这会导致错误,请避免该错误,并将得到结果True(或False) 创建或替换函数getoperatordetails(值字符变化、运算符字符变化、fieldinputvalue字符变化、retvalue boolean) 将布尔值的集合返回为 $BODY$ 声明 iVal数值; gVal数值; 开始 如果fieldInputValue!=“”还有接线员那就平等了 gVal:=值::

在postgresql数据库中创建存储过程
getoperatordetails

在另一个存储过程中获取这三个参数,但这会导致错误,请避免该错误,并将得到结果True(或False)

创建或替换函数getoperatordetails(值字符变化、运算符字符变化、fieldinputvalue字符变化、retvalue boolean)
将布尔值的集合返回为
$BODY$
声明
iVal数值;
gVal数值;
开始
如果fieldInputValue!=“”还有接线员那就平等了
gVal:=值::数值;
iVal:=fieldInputValue::numeric;
如果(运算符=('lesserThan')和iValgVal)然后
retValue=true;
ELSIF(运算符=('lessOrEqual')和iVal=gVal)则
retValue=true;
ELSIF(运算符=('equal')和值=(fieldInputValue))则
retValue=true;
其他的
retValue=false;
如果结束;
ELSIF(运算符=('equal')和值=(fieldInputValue))则
retValue=true;
其他的
retValue=false;
如果结束;
返回下一个值;
结束;
$BODY$
语言plpgsql VOLATILE
100美元
第1000行;
ALTER函数getoperatordetails(字符变化、字符变化、字符变化、布尔值)
博士后的所有者;
我需要得到正确(或错误)的结果

错误:AND的参数不能返回集合
第1行:选择retValue和getoperatordetails(值、运算符、字段…)


您在声明此函数时出错。它被声明为“返回布尔集合”,这是毫无意义的。可能您需要编写一个标量函数,所以声明应该是“RETURNS boolean”-然后您必须使用“RETURN”而不是“RETURN NEXT”

第二个问题:您使用C风格的编程-plpgsql是解释语言,您应该尽量减少指令数量-因此使用辅助值作为结果并不好-您的代码将慢2倍。您可以使用CASE构造而不是嵌套的,如果您可以使用justsql函数而不是PL/pgSQL函数,则更好

CREATE OR REPLACE FUNCTION foo(op text, a int, b int) RETURNS bool AS $$ SELECT CASE op WHEN '=' THEN a = b WHEN '<' THEN a < b WHEN '>' THEN a > b END; $$ LANGUAGE sql; 创建或替换函数foo(op text,a int,b int) 返回布尔作为$$ 选择案例op 当“=”时,则a=b 当“”时,则a>;b 结束; $$语言sql;
就个人而言,您似乎试图创建新的解释语言-使用解释语言创建解释不是最好的主意-真的。

您在声明此函数时出错。它被声明为“返回布尔集合”,这是毫无意义的。可能您需要编写一个标量函数,所以声明应该是“RETURNS boolean”-然后您必须使用“RETURN”而不是“RETURN NEXT”

第二个问题:您使用C风格的编程-plpgsql是解释语言,您应该尽量减少指令数量-因此使用辅助值作为结果并不好-您的代码将慢2倍。您可以使用CASE构造而不是嵌套的,如果您可以使用justsql函数而不是PL/pgSQL函数,则更好

CREATE OR REPLACE FUNCTION foo(op text, a int, b int) RETURNS bool AS $$ SELECT CASE op WHEN '=' THEN a = b WHEN '<' THEN a < b WHEN '>' THEN a > b END; $$ LANGUAGE sql; 创建或替换函数foo(op text,a int,b int) 返回布尔作为$$ 选择案例op 当“=”时,则a=b 当“”时,则a>;b 结束; $$语言sql;
就个人而言,你似乎在尝试创建新的解释语言-用解释语言创建解释不是最好的主意-真的。

这是你想要的方式吗?或者编辑您的查询并将其转发回。您好,我需要避免错误,并将返回类型True(或)False当此过程引发错误时!你给出了什么样的查询评估..嗨,我正在传递三个参数:retValue=retValue和getoperatordetails(value,operator,fieldinputvalue,retValue);我不能让你足够清楚,你能把你的代码保存成一个,请给出你试图调用函数的格式,并按你想要的方式使用吗?或者编辑您的查询并将其转发回。您好,我需要避免错误,并将返回类型True(或)False当此过程引发错误时!你给出了什么样的查询评估..嗨,我正在传递三个参数:retValue=retValue和getoperatordetails(value,operator,fieldinputvalue,retValue);我不能让你足够清楚,你能不能把你的代码保存在a中,请给出你试图调用函数和使用它的格式