无法理解为什么出现此“格式错误的数组文字”错误

时间:2018-10-18 11:04:09

标签: postgresql plpgsql

有人可以向我解释我做错了什么吗?

services.AddScoped<ValidateRoleClient>();
services.AddScoped<RolesFilterAttribute>();

调用:

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
    IF validation_type =  'login' THEN
        $1 := array_length(string_to_match,1); 
        RAISE NOTICE 'Login if , Array length is %', $1; 
    ELSIF validation_type = 'register' THEN 
        $1 := array_length(string_to_match,1); 
        RAISE NOTICE 'Array length is %', $1; 
    ELSIF validation_type =  'contact' THEN 
        $1 := array_length(string_to_match,1); 
        RAISE NOTICE 'Array length is %', $1; 
    END IF; 

    RETURN $1;
END;    
$$ lANGUAGE plpgsql;

错误:

SELECT validation (
   '{1,2,3,4,5}',
    '([a-zA-Z]{2,20}[\.\-\_])([a-zA-Z]{2,20}[0-9]{2,20})@([a-z]{2,6})\.([a-z]{2,3})',
    'login');

1 个答案:

答案 0 :(得分:0)

$1是第一个函数参数,因此$1string_to_matcha_length指向类型为character varying[]的同一对象。

所以任务

$1 := array_length(string_to_match,1);

尝试将5分配给数组变量,这会导致您观察到错误。

您似乎对$1的角色感到困惑。省略ALIAS FOR $1部分,并使用a_length代替$1