如何将命名参数传递给 SAP Hana 中的 ST_Makevalid 方法

问题描述 投票:0回答:1
在 SQL 语句中使用 st_geometry 的 St_Makevalid 方法非常简单,如

https://help.sap.com/docs/SAP_HANA_PLATFORM/cbbbfc20871e4559abfd45a78ad58c02/207f2c2aca5b46c1b064f22b7c3c87a8.html

像这样:

SELECT ST_GeomFromText('LINESTRING(0 0, 0 0)').ST_MakeValid(degenerate => 'COLLAPSE', polygonrule => 'NONZERO').ST_AsText() FROM DUMMY;
但是在函数、过程或触发器中使用带有命名参数的方法时,语法是什么?

这是例子:

CREATE TABLE geom_table (id bigint, geom st_geometry);
几何图形的简单验证触发器:

CREATE OR replace TRIGGER ins_upd_geom_table BEFORE INSERT OR UPDATE OF geom ON geom_table REFERENCING OLD ROW OLD, NEW ROW NEW FOR EACH ROW BEGIN DECLARE tmp_geom st_geometry; tmp_geom := :NEW.geom; NEW.geom := :tmp_geom.ST_MakeValid(degenerate => 'COLLAPSE', polygonrule => 'NONZERO'); END;
结果是:

SQL Error [257] [HY000]: SAP DBTech JDBC: [257] (at 260): sql syntax error: incorrect syntax near "=>": line 7 col 48 (at pos 260) Error position: line: 16 pos: 259
命名参数的正确语法是什么?

hana named-parameters
1个回答
0
投票

ST_MakeValid

刚刚发布,您似乎遇到了一个错误。一般来说,你的方法应该有效。然而,在这个星座中使用 
ST_MakeValid
 存在一个问题。目前,您可以通过在表变量而不是变量中存储和处理几何图形来解决此问题。

我知道,它不喜欢很好,但在问题得到妥善处理之前,类似这样的东西应该(功能上)完成工作:

CREATE TABLE GEOM_TABLE (ID BIGINT, GEOM ST_Geometry(3857)); CREATE OR REPLACE TRIGGER INS_UPD_GEOM_TABLE BEFORE INSERT OR UPDATE OF GEOM ON GEOM_TABLE REFERENCING NEW ROW new_row FOR EACH ROW BEGIN DECLARE geom ST_Geometry; DECLARE dml_tab TABLE (geom ST_Geometry(3857)); DECLARE no_dml_tab TABLE (geom ST_Geometry(3857)); geom := :new_row.geom; IF :geom.ST_IsValid() = 0 THEN INSERT INTO :dml_tab VALUES (:geom); UPDATE :dml_tab SET geom = geom.ST_MakeValid(degenerate => 'COLLAPSE', polygonrule => 'NONZERO'); no_dml_tab = SELECT geom FROM :dml_tab; new_row.geom = :no_dml_tab.geom[1]; END IF; END; INSERT INTO GEOM_TABLE VALUES (1, ST_GeomFromText('POLYGON((0 0, 1 0, 0 1, 1 1, 0 0))', 3857)); SELECT * FROM GEOM_TABLE;
    
© www.soinside.com 2019 - 2024. All rights reserved.