簡體   English   中英

在plpgsql中以編程方式訪問記錄的列

[英]Accessing columns of a record programatically in plpgsql

我試圖記錄對表所做的更改(如果有的話),但是在嘗試遍歷列名時遇到問題。 我收到“數組值必須以“ {” ...在FOR over SELECT行的第6行開頭”錯誤。 我不明白為什么會這樣。.該函數可以編譯,但是運行更新會出現該錯誤。

CREATE TABLE test(x varchar(50))

CREATE OR REPLACE FUNCTION testF()
RETURNS trigger
AS $$
DECLARE 
 col varchar[255]; //don't know if this is the right variable type to use
BEGIN
  IF OLD.* IS DISTINCT FROM NEW.* THEN
    FOR col in SELECT column_name FROM information_schema.columns WHERE table_schema = TG_TABLE_SCHEMA AND table_name = TG_TABLE_NAME LOOP
      INSERT INTO test(x) VALUES(col||'oldValue:'||OLD.col||'newValue:'||NEW.col); //I want to put the name and the old and new values in a varchar field
    END LOOP;
END IF;
RETURN NULL;
END $$ LANGUAGE plpgsql;

CREATE TRIGGER testT AFTER UPDATE
ON "triggerTable" FOR EACH ROW EXECUTE PROCEDURE testF();

要按名稱進入OLD或NEW列,您必須使用exec一堆類型轉換。

像這樣的東西:

execute '('||quote_literal(NEW::text)||'::'||quote_ident(pg_typeof(NEW))||
  ').'||quote_ident(col)||'::text';

這可能會使您對某些浮點數的值不精確

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM