我收到了错误
在游标值构造函数的例程,复合SQL语句或参数列表中不支持参数或SQL变量“SHAPE”的数据类型.SQLCODE = -789,SQLSTATE = 429BB,DRIVER = 4.18.60 < / p>
当我使用代码时
CREATE OR REPLACE TRIGGER z
BEFORE INSERT OR UPDATE ON x
REFERENCING NEW AS N
FOR EACH ROW
BEGIN
DECLARE contador INTEGER;
SET contador = (SELECT COUNT(*) FROM y s
WHERE NOT(n.yID = s.yID AND db2gse.ST_Contains(s.shape, n.shape) = 1));
IF contador > 0 THEN
SIGNAL SQLSTATE '20001' SET MESSAGE_TEXT ='invalid relationship';
END IF;
END@
但是如果拿出函数ST_Contains,它可以工作,我不知道为什么会这样。
编辑:带有DB2 11.1服务器版的Windows 7 64位Ultimate和ibm data studio,对不起,我忘了这个细节。答案 0 :(得分:0)
好吧,错误消息确实给你一个线索:在复合SQL语句中不支持结构化类型(ST_Geometry及其子节点),例如触发器主体。在将数据从交换格式转换为几何图形或将交换格式与几何图形一起存储在表格中之前,您需要执行此检查。
在后一种情况下,您将与shape ST_Geometry
列一起使用另一个,例如shape_wkt varchar(5000)
并在触发器中即时进行类型转换:
...AND db2gse.ST_Contains(
db2gse.ST_Geometry(s.shape_wkt),
db2gse.ST_Geometry(n.shape_wkt)
)
db2gse.ST_Geometry(s.shape_wkt)
可能是可选的,因为该值不需要在触发器中实例化,因此这可能有效:
...AND db2gse.ST_Contains(
s.shape,
db2gse.ST_Geometry(n.shape_wkt)
)