0
동일한 family_id를 공유하고 배열을 사용하여 dog_characteristics 테이블을 쿼리하는 모든 개에서 선언 된 배열을 작성하려고합니다.postgres의 where 절에서 선언 된 배열 변수를 호출하려면 어떻게해야합니까?
CREATE OR REPLACE FUNCTION update_dog_characteristics_guarantor_id()
RETURNS trigger AS $$
DECLARE dog_ids INT[];
BEGIN
SELECT id into dog_ids FROM dogs WHERE dogs.family_id = OLD.id;
IF ((OLD.family_id IS NOT NULL) && ((SELECT COUNT(*) FROM dog_ids) > 0)) THEN
UPDATE
dog_characteristics
SET
guarantor_id = NEW.guarantor_id
WHERE
dog_characteristics.account_id = OLD.account_id
AND dog_characteristics.dog_id IN ANY(dog_ids);
RETURN NULL;
END IF;
RETURN NULL;
END;
$$ LANGUAGE plpgsql;
내가 시도 무엇
AND dog_characteristics.dog_id = ANY(dog_ids);
AND dog_characteristics.dog_id = ANY(dog_ids::int[]);
AND dog_characteristics.dog_id IN (dog_ids::int[]);
AND dog_characteristics.dog_id IN (dog_ids);
AND dog_characteristics.dog_id IN (ARRAY(dog_ids));
AND dog_characteristics.dog_id IN ARRAY(dog_ids);
AND dog_characteristics.dog_id IN implode(',', dog_ids);
가장 일반적인 오류
ERROR: malformed array literal: "672"
DETAIL: Array value must start with "{" or dimension information.
CONTEXT: PL/pgSQL function update_dog_characteristics_guarantor_id() line 5 at SQL statement
'= ANY (dog_ids);'do work –
이렇게하면 형식이 잘못된 배열 리터럴에 대한 오류가 발생합니다. 그것은 하나의 ID 만 반환하기 때문입니까? –
나는
= dog_ids
을 시도했는데 같은 오류로 실패합니다. –