Oracle

是否可以在不創建儲存過程的情況下在 SQL 中進行循環?

  • September 12, 2021

我想在使用者定義的數據類型(ESRI 的版本)中遍歷 SHAPE/GEOMETRY 列中的頂點ST_GEOMETRY。我已在此處的 GIS SE 文章中發布了詳細資訊:將 sde.st_geometry M 值更新為累積距離(幾何長度)

我認為這通常會在儲存過程中完成(可能與sde.ST_GEOMETRY函式ST_NumPoints和結合使用ST_PointN)。但是,我沒有CREATE PROCEDURE權限,所以我無法創建儲存過程。

作為創建儲存過程的替代方法,有沒有辦法使用 SQL 語句來循環遍歷頂點?

甲骨文 12c (12.1.0.2.0)

您可以將 pl/sql 放在匿名塊中。這樣的事情可能會有所幫助:

declare
 v_vertices  your_user_defined_data_type;

 cursor your_cursor_c
 is
   select vertices
   from   your_table
   where  your_column = 'A VALUE';

begin
   open your_cursor_c;
   loop
     fetch your_cursor_c
     into  v_vertices;
     exit when your_cursor_c%notfound;

     ST_NumPoints(v_vertices);
     ST_PointN(v_vertices);

     commit;
   end loop;
end;

此外,對於 12c,您還可以執行一些內聯過程/函式。不確定是否有必要,但這裡有一個連結:https ://oracle-base.com/articles/12c/with-clause-enhancements-12cr1 。

引用自:https://dba.stackexchange.com/questions/149428