我無法訪問我的crosstab()
查詢字符串中的NEW
行的值。如何使用美元報價來傳遞NEW的價值?
CREATE OR REPLACE FUNCTION insert_fx()
RETURNS TRIGGER AS
$BODY$
BEGIN
INSERT INTO outputtb (serial,date, judge)
VALUES (NEW.serial, NEW.date, NEW.tjudge) RETURNING serial INTO newserial;
UPDATE outputtb
SET (reading1,
reading2,
reading3) =
(SELECT ct."reading1",
ct."reading2",
ct."reading3"
FROM crosstab($$
SELECT tb2. serial,tb2. readings,tb2. value
FROM DATA AS tb2
INNER JOIN outputtb AS tb1 USING (serial)
WHERE tb2.serial = $$||NEW.serno||$$
ORDER BY 1 ASC $$, $$
VALUES ('reading1'),('reading2'),('reading3')$$
) ct ("Serial" VARCHAR(50),"Reading1" FLOAT8, "Reading2" FLOAT8, "Reading3" FLOAT8))
WHERE sn = NEW.serno;
RETURN NEW;
END;
$BODY$
LANGUAGE plpgsql VOLATILE;
CREATE TRIGGER insert_tg
BEFORE INSERT ON details
FOR EACH ROW EXECUTE PROCEDURE insert_fx();
它返回此錯誤:
ERROR: syntax error at or near "CC1027HCA0GESKN00CC000FT0000" LINE 6: tb2. serial = 043611007853619CC1027HCA0GESKN00CC000FT...
我認爲它不接受字符,它只接受整數。也許引用需要一些修改,我不熟悉pgsql引用。
我需要幫助來完成我的項目。我被困在這一部分。
您實際上並不需要'crosstab()'。並使用插入**和**更新是矯枉過正。這可以通過一個'insert'語句完成(btw:'serial'是一個保留字,不應該作爲列名使用) –
@a_horse_with_no_name謝謝mate。是的,它是一個矯枉過正的插入和更新。我跟隨你和ErwinBrandstetter的建議。 – tacticz03