暂无图片
oracle 触发器监听地理信息表,使用函数sde.st_astext(:new.shape) 获取wkt 数据 ,一直是变化之前的数据,这个有什么解决方法吗
我来答
分享
毛丽成
2025-04-17
oracle 触发器监听地理信息表,使用函数sde.st_astext(:new.shape) 获取wkt 数据 ,一直是变化之前的数据,这个有什么解决方法吗
暂无图片 15M

对地理信息数据库进行数据实时监听,数据库采用的是oracle, 用的方式是 触发器获取更新的 :NEW.SHAPE 的地理数据,使用函数sde.st_astext(:new.shape) 获取wkt 数据 ,一直是变化之前的数据,这个有什么解决方法吗

我来答
添加附件
收藏
分享
问题补充
6条回答
默认
最新
小草

befor还是after啊?

暂无图片 评论
暂无图片 有用 1
毛丽成
题主
2025-04-18
after
毛丽成

使用的是行级触发器 ,用的是After

暂无图片 评论
暂无图片 有用 0
小草

把ddl贴出来看看。

暂无图片 评论
暂无图片 有用 0
毛丽成
题主
2025-04-21
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; 这个是写的触发器
S
Seal

触发条件是什么?new row定义了吗?

暂无图片 评论
暂无图片 有用 1
毛丽成
题主
2025-04-21
触发条件是 对数据库表的增删改 操作 都会触发
小草

sde.st_astext(:new.shape)
主要看你这个函数里面怎么写的了,这个函数ddl贴一下啊?

暂无图片 评论
暂无图片 有用 0
毛丽成
题主
2025-04-21
这个函数 是oracle 装的空间扩展支持,在plsql窗口执行得出来的结果是好的
小草

你可以单步调试一下,进函数里看看返回值。

暂无图片 评论
暂无图片 有用 0
回答交流
提交
问题信息
请登录之后查看
邀请回答
暂无人订阅该标签,敬请期待~~
暂无图片墨值悬赏