Попытка создать функцию триггера для обновления столбца в точечном слое для обновления столбца с идентификатором из другой точки.Первый слой - это оборудование, установленное на столбе (второй слой).Просто хочу заполнить информацию о полюсе при добавлении нового оборудования.
Пробовал этот код: (я использую аналог для резервного копирования истории)
- 1.Создать индекс в столбце геометрии:
CREATE INDEX idx_sc_48_lom_ar5_geom ON mapinfo.public.sc_48_lom_ar5 USING GIST("SP_GEOMETRY");
- 2.Функция:
CREATE OR REPLACE FUNCTION mapinfo.public.sc_48_lom_ar5_tracker() RETURNS trigger AS $sc_48_lom_ar5_tracker$
BEGIN
-- INSERT
IF (TG_OP = 'INSERT') THEN
SELECT ST_Buffer("SP_GEOMETRY",5, 'quad_segs=8') FROM mapinfo.public.poles_lom_ar5;
UPDATE mapinfo.public.sc_48_lom_ar5
SET "Location_ID" = poles_lom_ar5."Location_ID"
FROM mapinfo.public.poles_lom_ar5
WHERE ST_Contains (mapinfo.public.sc_48_lom_ar5."SP_GEOMETRY", mapinfo.public.poles_lom_ar5."SP_GEOMETRY");
RETURN NEW;
-- UPDATE
ELSIF (TG_OP = 'UPDATE') THEN
SELECT ST_Buffer("SP_GEOMETRY",5, 'quad_segs=8') FROM mapinfo.public.poles_lom_ar5;
UPDATE mapinfo.public.sc_48_lom_ar5
SET "Location_ID" = poles_lom_ar5."Location_ID"
FROM mapinfo.public.poles_lom_ar5
WHERE ST_Contains (mapinfo.public.sc_48_lom_ar5."SP_GEOMETRY", mapinfo.public.poles_lom_ar5."SP_GEOMETRY");
RETURN NEW;
END IF;
END;
$sc_48_lom_ar5_tracker$ LANGUAGE plpgsql;
- 3.Триггер создания:
DROP TRIGGER IF EXISTS trg_sc_48_lom_ar5_tracker ON mapinfo.public.sc_48_lom_ar5;
CREATE TRIGGER trg_sc_48_lom_ar5_tracker AFTER INSERT OR UPDATE ON mapinfo.public.sc_48_lom_ar5
FOR EACH ROW EXECUTE PROCEDURE mapinfo.public.sc_48_lom_ar5_tracker();
Применение SQL без ошибок, но когда я пытаюсь сохранить изменения, я получаю сообщение об ошибке:
Ошибка ODBC: ODBC RC = -1,ODBC SQLState = 42601, RC СУБД = 1,
СУБД Msg = ОШИБКА: у запроса нет места назначения для данных результата;
Ошибка при выполнении запроса.Операция отменена.