【问题标题】:Can't understand why I got this "malformed array literal" error不明白为什么我得到这个“格式错误的数组文字”错误
【发布时间】:2018-10-18 11:04:08
【问题描述】:

谁能向我解释我做错了什么?

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');

错误:

ERROR:  malformed array literal: "5"
DETAIL:  Array value must start with "{" or dimension information.
CONTEXT:  PL/pgSQL function validation(character varying[],character varying,character varying) line 7 at assignment
SQL state: 22P02

【问题讨论】:

  • 再一次:与其向您抛出一些无效代码,不如解释该函数应该做什么。目前IF 完全没用,因为无论哪种情况为真,您总是在做同样的事情。你为什么不使用正确的代码from the answer you accepted

标签: postgresql plpgsql


【解决方案1】:

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

所以任务

$1 := array_length(string_to_match,1);

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

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

【讨论】:

    猜你喜欢
    • 2016-02-03
    • 1970-01-01
    • 2016-11-25
    • 1970-01-01
    • 1970-01-01
    • 2016-04-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多