NEED HELP - Создать триггер для обновления столбца - PullRequest
0 голосов
/ 17 октября 2018

Попытка создать функцию триггера для обновления столбца в точечном слое для обновления столбца с идентификатором из другой точки.Первый слой - это оборудование, установленное на столбе (второй слой).Просто хочу заполнить информацию о полюсе при добавлении нового оборудования.

Пробовал этот код: (я использую аналог для резервного копирования истории)

- 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 = ОШИБКА: у запроса нет места назначения для данных результата;
Ошибка при выполнении запроса.Операция отменена.

...