【发布时间】:2016-07-12 04:51:10
【问题描述】:
我无法访问crosstab() 查询字符串中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语句来完成(顺便说一句:serial是保留字,不应用作列名) -
@a_horse_with_no_name 谢谢伙计。是的,插入和更新有点过头了。我听从了你和 ErwinBrandstetter 的建议。
标签: sql postgresql plpgsql quotes postgresql-9.5