oracle 触发器监听地理信息表,使用函数sde.st_astext(:new.shape) 获取wkt 数据 ,一直是变化之前的数据,这个有什么解决方法吗
15M对地理信息数据库进行数据实时监听,数据库采用的是oracle, 用的方式是 触发器获取更新的 :NEW.SHAPE 的地理数据,使用函数sde.st_astext(:new.shape) 获取wkt 数据 ,一直是变化之前的数据,这个有什么解决方法吗
我来答
添加附件
收藏
复制链接
微信扫码分享
在小程序上查看
分享
添加附件
问题补充
6条回答
默认
最新
CREATE OR REPLACE TRIGGER buildnt_trigger
AFTER INSERT or UPDATE or DELETE on buildnt
FOR EACH ROW
DECLARE
V_RESULT clob;
l_output varchar(1000);
V_AREA number;
BEGIN
SELECT sde.st_astext(:new.SHAPE) INTO V_RESULT FROM dual;
IF UPDATING THEN
UPDATE SDE.BUILDNT_SYC SET SCALE = :new.SCALE,CHDATE = :new.CHDATE,ZH=:new.ZH,FWMC=:new.FWMC,FWCS=:new.FWCS,FWLX = :new.FWLX,SJLY=:new.SJLY,CJRQ=:new.CJRQ,XGRQ=:new.XGRQ,REMARK=:new.REMARK,
STATUSFLAG=:new.STATUSFLAG,MATCHSTATUS=:new.MATCHSTATUS,HASSTREET=:new.HASSTREET,REGION=:new.REGION,DISTRICT=:new.DISTRICT,MATCHNAME=:new.MATCHNAME,CX=:new.CX,CY=:new.CY,X=:new.X,Y=:new.Y,
PNCODE=:new.PNCODE,ALIASNAME=:new.ALIASNAME,ABBRNAME=:new.ABBRNAME,HISTORYNAME=:new.HISTORYNAME,SOURCE=:new.SOURCE,SECRET=:new.SECRET,ST_DZYSID=:new.ST_DZYSID,SHORTNAME=:new.SHORTNAME
,FLOOR=:new.FLOOR,SHAPE = V_RESULT WHERE BUIDGUID = :new.BUIDGUID;
ELSIF inserting THEN
INSERT INTO SDE.BUILDNT_SYC(OBJECTID, BUIDGUID, SCALE, CHDATE, ZH, FWMC, FWCS, FWLX, SJLY, CJRQ, XGRQ, REMARK, STATUSFLAG, MATCHSTATUS, HASSTREET, REGION, DISTRICT, MATCHNAME
, CX, CY, X,Y, SHAPE, PNCODE, ALIASNAME, ABBRNAME, HISTORYNAME, SOURCE,SECRET, ST_DZYSID, SHORTNAME)
VALUES(:new.OBJECTID, :new.BUIDGUID, :new.SCALE, :new.CHDATE, :new.ZH, :new.FWMC, :new.FWCS, :new.FWLX, :new.SJLY, :new.CJRQ, :new.XGRQ, :new.REMARK, :new.STATUSFLAG, :new.MATCHSTATUS, :new.HASSTREET
, :new.REGION, :new.DISTRICT, :new.MATCHNAME
, :new.CX, :new.CY, :new.X,:new.Y, V_RESULT, :new.PNCODE, :new.ALIASNAME, :new.ABBRNAME, :new.HISTORYNAME, :new.SOURCE,:new.SECRET, :new.ST_DZYSID, :new.SHORTNAME);
ELSIF deleting then
DELETE FROM SDE.BUILDNT_SYC WHERE OBJECTID = :old.OBJECTID;
END IF;
EXCEPTION
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE('Error in trigger:' || sqlerrm);
l_output := 'Error in trigger:' || sqlerrm;
INSERT INTO LOG_OPERATE(LOG_MSG)VALUES(l_output);
END;
这个是写的触发器
触发条件是什么?new row定义了吗?
评论
有用 1sde.st_astext(:new.shape)
主要看你这个函数里面怎么写的了,这个函数ddl贴一下啊?
评论
有用 0回答交流
提交
问题信息
请登录之后查看
邀请回答
暂无人订阅该标签,敬请期待~~
墨值悬赏

