为什么在postgreSQL中使用case和array函数的语法错误?

Why syntax error using case and array functions in postgreSQL ?

我是postgreSQL数据库的新手,你能解释一下我为什么会出现语法错误吗? 我在文档文档中找不到任何答案

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
  CREATE OR REPLACE FUNCTION validation(string_to_match VARCHAR [], pattern
    VARCHAR , validation_type VARCHAR) RETURNS BOOLEAN AS $$  
    DECLARE a_length ALIAS FOR $1;
    DECLARE result_validation ALIAS FOR $2;
    BEGIN

    CASE validation_type
      WHEN 'login' THEN array_length (string_to_match , 1) INTO $1 RAISE NOTICE
    'Array length is %', $1;
      WHEN 'register' THEN array_length(string_to_match,1) INTO $1 RAISE NOTICE
    'Array length is %', $1;
      WHEN 'contact' THEN array_length(string_to_match,1) INTO $1 RAISE NOTICE
    'Array length is %', $1;
    END CASE;

    END;    
    $$ LANGUAGE plpgsql;

ERROR: syntax error at or near"array_length"
LINE 7: WHEN 'login' THEN array_length (string_to_match , 1) INTO...
^
SQL state: 42601
Character: 258


可能你想要这样的东西(?):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
CREATE OR REPLACE FUNCTION validation(string_to_match VARCHAR [], pattern
VARCHAR , validation_type VARCHAR)
RETURNS BOOLEAN
AS $$  
DECLARE a_length INT;
BEGIN

    IF validation_type =  'login' THEN
        a_length := array_length(string_to_match , 1);
        RAISE NOTICE 'Array length is %', a_length;
    ELSIF validation_type = 'register' THEN
        a_length := array_length(string_to_match , 1);
        RAISE NOTICE 'Array length is %', a_length;
    ELSIF validation_type =  'contact' THEN
        a_length := array_length(string_to_match , 1);
        RAISE NOTICE 'Array length is %', a_length;
    END IF;

    RETURN TRUE; -- or false ?
END;    
$$ LANGUAGE plpgsql;


  • CASE WHEN THEN END不是声明,而是表达式。
  • 因此它内部不需要那些分号......
  • 并且RAISE也不能在里面使用。
  • 表达式INTO变量是什么意思?


它只是第一个直觉,但我认为这是因为array_length和(string_to_match,1)之间的空间