2017-08-31 135 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

相關問題