我是PostgreSQL数据库的新手,您能解释一下我为什么出现语法错误吗?我在文档docs
中找不到任何答案 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;
错误:“ array_length”或附近的语法错误 第7行:“登录”然后将array_length(string_to_match,1)插入... ^ SQL状态:42601 角色:258
答案 0 :(得分:2)
可能您想要这样的东西(?):
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;
答案 1 :(得分:0)
这只是第一个直觉,但我认为这是因为array_length与(string_to_match,1)之间的间隔
答案 2 :(得分:0)
CASE WHEN THEN END
不是语句,而是表达式。RAISE
也不能在内部使用。INTO
变量是什么意思?