我试图运行此查询:PostgreSQL的CASE功能
CREATE Function sp_test_case() returns void as $$
DECLARE
cont int=(Select MAX(id_fact)from backup_factura);
BEGIN
while cont>0
LOOP
UPDATE backup_factura
SET tipo= CASE
WHEN ((total_fact) <=100) THEN 'X'
WHEN ((total_fact) <=200) THEN 'Y'
ELSE 'Z'
END;
OUTPUT Deleted.tipo AS BeforeValue,
Inserted.tipo AS AfterValue
WHERE id_fact=cont;
cont:=cont-1;
END LOOP;
RETURN;
END;
$$ LANGUAGE plpgsql;
我适应,原本是写在SQL服务器的代码。现在我的疑问是: 你知道OUTPUT语句的等价物吗?
OUTPUT子句用于显示度假前后的值。 F.E:
OUTPUT Deleted.BusinessEntityID, Deleted.VacationHours AS BeforeValue,
Inserted.VacationHours AS AfterValue
的我需要什么,以使其工作做什么建议吗?
在此先感谢您的支持时间&!
没有'OUTPUT Deleted.tipo AS Postgres里BeforeValue'选项。你在寻找“回归”条款吗? http://www.postgresql.org/docs/current/static/sql-update.html你也没有声明'Beforevalue'和'AfterValue'变量。反正你也没有使用它们。你究竟想达到什么目的?据我所知,你可以简单地使用:'UPDATE backup_factura SET tipo = CASE WHEN total_fact <= 100 THEN'X'WHEN total_fact <= 200 THEN'Y'ELSE'Z'END CASE;'不需要循环不需要'where'子句。这会更快**。 – 2014-10-07 20:07:30
错误实际上并不存在(根据PostgreSQL在其他部分)。检查我的编辑 – 2014-10-07 20:11:46
这并不重要,Postgres中没有'output'子句。检查手册(你也用''结束'update'语句,那么你有(无效的)'output'子句和'where'子句是没有意义的。 – 2014-10-07 20:12:17