gpt4 book ai didi

PostgreSQL 数据库存储过程

转载 作者:行者123 更新时间:2023-11-29 13:33:46 26 4
gpt4 key购买 nike

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

在另一个存储过程中获取三个参数,但是会出错,避免出错,会得到结果True(或)False

 CREATE OR REPLACE FUNCTION getoperatordetails(value character varying, operator     character varying, fieldinputvalue character varying, retvalue boolean)
RETURNS SETOF boolean AS
$BODY$
declare
iVal numeric;
gVal numeric;
begin
IF fieldInputValue != ' ' AND operator!='equal' THEN

gVal := value :: numeric;
iVal := fieldInputValue:: numeric;

IF (operator = ('lesserThan') AND iVal < gVal) THEN
retValue= true;

ELSIF (operator = ('greaterThan') AND iVal > gVal) THEN
retValue= true;

ELSIF (operator = ('lessOrEqual') AND iVal <= gVal) THEN
retValue= true;

ELSIF (operator = ('greaterOrEqual') AND iVal >= gVal) THEN
retValue= true;

ELSIF (operator = ('equal') AND value = (fieldInputValue)) THEN
retValue= true;

ELSE
retValue= false;

END IF;

ELSIF (operator=('equal') AND value=(fieldInputValue)) THEN
retValue= true;

ELSE
retValue= false;

END IF;
return next retValue;
end;

$BODY$
LANGUAGE plpgsql VOLATILE
COST 100
ROWS 1000;
ALTER FUNCTION getoperatordetails(character varying, character varying, character varying, boolean)
OWNER TO postgres;

我需要得到结果为真(或)假

ERROR: argument of AND must not return a set
LINE 1: SELECT retValue AND getoperatordetails(value, operator, fiel...)

最佳答案

你在这个函数的声明中是错误的。它被声明为“RETURNS SETOF boolean”,这是胡说八道。您可能会编写一个标量函数,因此声明应该是“RETURNS boolean”——然后您必须使用“RETURN”而不是“RETURN NEXT”。

第二个问题:您使用 C 风格的编程 - plpgsql 是解释型语言,您应该尽量减少指令数量 - 因此对结果使用辅助值并不好 - 您的代码会慢 2 倍。您可以使用 CASE 构造而不是嵌套 IF - 或者更好的是,您可以只使用 SQL 函数而不是 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;

就个人而言,您似乎在尝试创建新的解释语言——用解释语言创建解释并不是最好的主意——真的。

关于PostgreSQL 数据库存储过程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18009487/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com