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: 258BLOCKQUOTE>
可能你想要这样的东西(?):
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)之间的空间