쿼리를 반복하면서 다음 루프의 실제 레코드를 유지하므로 인접한 두 행을 비교할 수 있습니다.PostgreSQL에서 RECORD를 복제하는 방법
CREATE OR REPLACE FUNCTION public.test()
RETURNS void AS
$body$
DECLARE
previous RECORD;
actual RECORD;
query TEXT;
isdistinct BOOLEAN;
tablename VARCHAR;
columnname VARCHAR;
firstrow BOOLEAN DEFAULT TRUE;
BEGIN
tablename = 'naplo.esemeny';
columnname = 'esemeny_id';
query = 'SELECT * FROM ' || tablename || ' LIMIT 2';
FOR actual IN EXECUTE query LOOP
--do stuff
--save previous record
IF NOT firstrow THEN
EXECUTE 'SELECT ($1).' || columnname || ' IS DISTINCT FROM ($2).' || columnname
INTO isdistinct USING previous, actual;
RAISE NOTICE 'previous: %', previous.esemeny_id;
RAISE NOTICE 'actual: %', actual.esemeny_id;
RAISE NOTICE 'isdistinct: %', isdistinct;
ELSE
firstrow = false;
END IF;
previous = actual;
END LOOP;
RETURN;
END;
$body$
LANGUAGE 'plpgsql'
VOLATILE
CALLED ON NULL INPUT
SECURITY INVOKER
COST 100;
표 :
CREATE TABLE naplo.esemeny (
esemeny_id SERIAL,
felhasznalo_id VARCHAR DEFAULT "current_user"() NOT NULL,
kotesszam VARCHAR(10),
idegen_azonosito INTEGER,
esemenytipus_id VARCHAR(10),
letrehozva TIMESTAMP WITHOUT TIME ZONE DEFAULT now() NOT NULL,
szoveg VARCHAR,
munkalap_id VARCHAR(13),
ajanlat_id INTEGER,
CONSTRAINT esemeny_pkey PRIMARY KEY(esemeny_id),
CONSTRAINT esemeny_fk_esemenytipus FOREIGN KEY (esemenytipus_id)
REFERENCES naplo.esemenytipus(esemenytipus_id)
ON DELETE RESTRICT
ON UPDATE RESTRICT
NOT DEFERRABLE
)
WITH (oids = true);
위의 코드가 작동하지 않습니다, 다음과 같은 오류 메시지가 발생합니다 : 나는 무엇을
ERROR: could not identify column "esemeny_id" in record data type
LINE 1: SELECT ($1).esemeny_id IS DISTINCT FROM ($2).esemeny_id
^
QUERY: SELECT ($1).esemeny_id IS DISTINCT FROM ($2).esemeny_id
CONTEXT: PL/pgSQL function "test" line 18 at EXECUTE statement
LOG: duration: 0.000 ms statement: SET DateStyle TO 'ISO'
를 놓친 거지?
면책 조항 : 코드가 너무 이해하지 못한다는 것을 알고 있으며, 문제를 시연 할 수 있도록 작성했습니다.
이 데이터 형식에는 해당 열이 없다는 메시지가 표시됩니다. 그게 사실이야? 아마도 열 이름이'id'일까요? – Ashalynd
** 함수 헤더 ** (반환 형식 및 언어 선언 포함)이 없습니다. 나는 이것을 두세 번 보았고, 사람들이이 기능의 필수적인 ** 부분을 찢어 버리는 것이 현명하고 (또는 심지어 받아 들일 수 있다고) 생각하게 만드는 것이 무엇인지 궁금해하고 있습니다. 질문을 수정하십시오. –
해당 열 이름이 존재합니다. – belidzs