我試圖運行此查詢: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