많은 게시물을 보았지만 내 상황에 적절한 대답을 찾을 수 없었습니다. PostGIS 2.3 확장을 사용합니다. 당신은 내가 변수 내가 사용하고 있지 않다 "geometrie"이 볼 수 있듯이 나는 실패, 내가 사용하고자하는 데이터를 포함하는 변수를 선언하려하기 때문에, 그것이PostgreSQL 9.5 : 테이블 "new"에 대한 FROM 절 항목이 누락되었습니다
CREATE OR REPLACE FUNCTION public.split_cable()
RETURNS trigger AS
$BODY$
DECLARE geometrie geometry;
BEGIN
geometrie = new.geom;
create view temp_wire as (
with brs as (select boite.geom from cablage_pays_gex.boite
where st_intersects(boite.geom, new.geom) and boite.geom not in (select st_startpoint(st_linemerge(new.geom))) and boite.geom not in (select st_endpoint(st_linemerge(new.geom)))
)
select st_dump(st_split(new.geom, brs.geom)) from brs
);
RETURN new;
END
$BODY$
LANGUAGE plpgsql VOLATILE;
: 여기 내 코드입니다. 내가 얻는 오류는 내 질문에 제목을 붙이고, st_intersects() 함수를 가리키고있다. 그래서 처음 new.geom을 호출하려고한다. 내가 도대체 뭘 잘못하고있는 겁니까? 어떻게 해결할 수 있을까요? 동적 SQL 문CREATE VIEW
요구된다;
EDIT는 : DR
CREATE TABLE public.cable2
(
id_cable integer NOT NULL DEFAULT nextval('cable2_seq'::regclass),
geom geometry(MultiLineString,2154),
CONSTRAINT cable2_pkey PRIMARY KEY (id_cable)
);
트리거 테이블에 대한'create table' 문을 보여주십시오. 그러나 트리거에서 뷰를 생성하는 것은 ** 정말 ** 나쁜 생각입니다. 기본 테이블에서 두 번째 DML 문 다음에 실패합니다. 즉, DML 문은 한 번만 실행하면됩니다. 이후의 모든 문에 대해 오류가 발생하기 때문에 DML 문을 한 번 실행 한 다음 다시 실행할 수는 없습니다. –
@a_horse_with_no_name 무슨 뜻인지 확실하지 않습니다. 나는 대부분 제 3 자 소프트웨어 인 QGIS를 사용하여 db와 상호 작용하므로 어떠한 명령문도 사용하지 않습니다. 'create trigger' 문을 의미합니까? –
그런 다음 해당 테이블에 대한 첫 번째 DML 문 다음에 트리거가 실패하므로 해당 타사 소프트웨어가 작동을 멈 춥니 다. 트리거에 어떤 문제가 있는지 알아 보려면 트리거를 정의 할 테이블에 대한 create table 문을 봐야합니다. –