当我运行此功能脚本时,在参数附近出现语法错误。
当前,我正在使用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;
答案 0 :(得分:1)
该错误涉及以下行:
FOR e IN employees LOOP
有两个问题。由于employees
是一个数组,您应该使用
FOREACH e IN ARRAY employees LOOP
您还应该声明循环变量e
。同样,第二个循环是creators
。