为什么我的矿山函数中的数组参数出现语法错误?

时间:2018-10-28 14:09:14

标签: postgresql plpgsql

当我运行此功能脚本时,在参数附近出现语法错误。

当前,我正在使用Data Grip,并且在我的IDE中没有任何语法错误。

您能解释一下我为什么在我的案例中出现语法错误吗?

  
ERROR: syntax error at or near "employees"
  
CREATE OR REPLACE FUNCTION companyRegistrationValidator (company_id VARCHAR, comp_name VARCHAR, comp_email VARCHAR, comp_password VARCHAR, employees text[], creators text[][], country VARCHAR) RETURNS BOOLEAN AS $$

DECLARE
    checked BOOLEAN := FALSE ;
    r_id VARCHAR; r_name VARCHAR; r_email VARCHAR; r_password VARCHAR; r_country VARCHAR;
    cr_counter INTEGER = 0; em_counter INTEGER = 0; c_ar_length INTEGER  = 0; e_ar_length INTEGER = 0;

BEGIN

    SELECT id_r , email_r , password_r , country_r , firstname_r INTO r_id , r_email , r_password, r_country , r_name FROM regex;

    c_ar_length := cardinality(creators);
    e_ar_length := cardinality(employees);

    FOR e IN employees LOOP

        CASE WHEN e ~ r_id THEN em_counter := +1; END CASE;
        CASE WHEN e ~ r_name THEN em_counter := +1; END CASE;
        CASE WHEN e ~ r_name THEN em_counter := +1; END CASE;
        CASE WHEN e ~ r_email THEN em_counter := +1; END CASE;
        CASE WHEN e ~ r_password THEN em_counter := +1; END CASE;

    END LOOP ;

    FOR cr IN creators LOOP

        FOR i IN cr LOOP

            CASE WHEN  i ~ r_name THEN cr_counter :=+ 1; END CASE;

        END LOOP;

    END LOOP;

    IF cr_counter = c_ar_length AND em_counter = e_ar_length AND company_id ~ r_id AND comp_name ~ r_name AND comp_email ~ r_email AND comp_password ~ r_password AND country ~ r_country
        THEN checked := TRUE;
    END IF;

    RETURN checked;

  END;

$$ LANGUAGE plpgsql;

1 个答案:

答案 0 :(得分:1)

该错误涉及以下行:

FOR e IN employees LOOP

有两个问题。由于employees是一个数组,您应该使用

FOREACH e IN ARRAY employees LOOP

您还应该声明循环变量e。同样,第二个循环是creators

相关问题