2017-08-31 134 views
0

我发现了错误错误SQLCODE = -789,SQLSTATE = 429BB使用函数ST_Contains

在该例程不支持参数或SQL变量“形状”的数据类型,复合SQL语句,或光标值构造的参数列表.. SQLCODE = -789,SQLSTATE = 429BB,DRIVER = 60年4月18日

当我使用代码

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;        
[email protected] 

但是,如果取出函数ST _Contains,它的工作原理,我不知道为什么发生这种情况。

编辑:Windows 7 64bit旗舰版与DB2 11.1服务器版与IBM数据工作室,对不起,我忘了这个细节。

+0

是什么DB2服务器版本和操作系统平台? – mao

回答

0

那么,错误消息确实会给你一个线索:结构化类型(ST_Geometry及其子类)在复合SQL语句(例如触发器正文)中不受支持。在将数据从交换格式转换为几何体或将交换格式与几何体一起存储在表中之前,您需要执行此检查。

在后一种情况下,您应该有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) 
) 
+0

谢谢,现在我可以看到问题是与n.shape,当我把AND db2gse.ST_Contains( s.shape, s.shape);所有东西都可以,但是当我使用AND db2gse.ST_Contains( s.shape, db2gse.ST_Geometry(n.shape_wkt) )我仍然有同样的错误,我该怎么办?对不起,如果答案很明显,我是DB2的新手 – singleMan

+0

只是为了确认,你的'n.shape_wkt'是一些基本的SQL数据类型,比如VARCHAR?如果它仍然拒绝这样编译,我想你唯一的选择就是在数据库之外处理这个问题,就像在插入/更新值之前一样。对不起,恐怕我不能提供太多帮助,因为我没有太多的空间数据。 – mustaccio

+0

感谢您的帮助,数据类型是db2gse.ST_Polygon – singleMan

相关问题