Вызов скалярной функции из процедуры HANA

У меня есть функция, которая определяется как: Где XXXXX — моя схема, YYYYY — мой пакет.

PROCEDURE "XXXXX"."YYYYY.SPATIAL::SP_GA_PT_PATH_DISTANCE" (IN PID NVarChar(36)) 
LANGUAGE SQLScript
SQL SECURITY INVOKER 
--DEFAULT SCHEMA <default_schema_name>
AS
BEGIN

Я хочу вызвать функцию и присвоить результат переменной, я пробовал следующие два способа:

intIntersect := XXXXX.YYYYY.SPATIAL::GA_INTERSECT (32.925148, -117.020051, 
                                                   32.924672, -117.019454,
                                                   32.924488, -117.020322,
                                                   32.924849, -117.019759);

​SELECT XXXXX.YYYYY.SPATIAL::GA_INTERSECT (32.925148, -117.020051, 
                                      32.924672, -117.019454,
                                      32.924488, -117.020322,
                                      32.924849, -117.019759) INTO intIntersect FROM DUMMY;

Я играл с разными перестановками этого, но ничего не работает.

Любые идеи?

Спасибо.


person NY Reno    schedule 26.08.2020    source источник


Ответы (1)


То, что вы описываете как FUNCTION, на самом деле является PROCEDURE в вашем примере кода.

Они различаются способами, которыми вы можете вызвать любой из них. Процедуры необходимо вызывать с помощью оператора CALL.

Функции можно использовать либо как скалярную функцию во всех местах, где можно использовать выражения (например, в списке проекций SELECT-оператора), либо, для табличных функций, таких как таблица в условии WHERE.

Параметры, переданные процедуре, представляют собой список элементов данных. Общий способ передачи списков параметров заключается в использовании параметра табличного типа:

CREATE FUNCTION "XXXXX"."YYYYY.SPATIAL::SP_GA_PT_PATH_DISTANCE" 
              (IN_PIDS TABLE (PID NVARCHAR(36)) )
       RETURNS TABLE (DISTANCES DECIMAL)
AS
BEGIN

   SELECT * FROM :IN_PIDS;
...
person Lars Br.    schedule 27.08.2020