почему я получаю ошибку в этом для каждого в PL / pgSQL - PullRequest
1 голос
/ 28 апреля 2020

У меня есть эта функция, применяющая индекс jaccard в некоторых текстовых строках

CREATE OR REPLACE FUNCTION jaccard(INPUT text, INPUT2 text) RETURNS real
LANGUAGE plpgsql 
AS $$

DECLARE
    trigrama1 text[];
    trigrama2 text[];
    union text[];
    interception text[];
    palabra1 text;  
    palabra2 text;
    coincidencias int=0;
    inicio int=1;
    fin int=3;
    longitud int;
    longitud2 int;
    resultado real;
    item text;
    item2 text;

BEGIN

     palabra1=replace(INPUT,' ','');
     palabra2=replace(INPUT2,' ','');
     palabra1=regexp_replace(palabra1, '[^a-zA-Z]', '', 'g');
     palabra2=regexp_replace(palabra2, '[^a-zA-Z]', '', 'g');
     longitud=char_length(palabra1);

WHILE fin <= longitud LOOP
    trigrama1=array_append(trigrama1,substr(palabra1, inicio,3));
    fin=fin+1;
    inicio=inicio+1;
END LOOP;

inicio=1;
fin=3;
longitud=char_length(palabra2);

WHILE fin <= longitud LOOP
    trigrama2=array_append(trigrama2,substr(palabra2, inicio,3));
    fin=fin+1;
    inicio=inicio+1;
END LOOP;

union=array_cat(ARRAY[]::text[],trigrama1);

FOREACH item IN ARRAY trigrama2 LOOP
    coincidencias=0;
   FOREACH item2 IN ARRAY union LOOP  --line error
        IF item=item2 THEN
            coincidencias = coincidencias +1;
        END IF;
    END LOOP;
    IF coincidencias =0  THEN
        union=array_append(union,item);
    END IF;
END LOOP;

FOREACH item IN ARRAY trigrama2 LOOP
    coincidendencias=0;
    FOREACH item2 IN ARRAY trigrama1 LOOP
        IF item=item2 THEN
            coincidencias = coincidencias +1;
        END IF;
    END LOOP;
    IF coincidencias >0  THEN
        interception=array_append(interception,item);
    END IF;
END LOOP;
longitud=array_length(union,1);
longitud2=array_length(interception,1);
resultado=longitud/longitud1;

RETURN resultado;   
END;    
$$;

Это сообщение об ошибке: -

ОШИБКА: синтаксическая ошибка в конце строки ввода 48: FOREACH item2 В объединении ARRAY L OOP

ошибка возникает во вложенном foreach, который повторяет текстовый массив postgres 11, все массивы имеют содержимое

jadshkjashdkhaskdhasdajksdhkashdkasd kalsjdlkashdlkasd kashdjlkashdlkashdaksjdhahgasdddddddddddddddddddddddasadjkfhkasdhfkshdfkhdskfhdksfhkshdfkhsdkfhsdkfhsaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaassssaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaassssssssssssssssssssssssssssssssssssssssssssssdaaksuhydhfiuoasdyfiuasydbfuioshdddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddiasssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...