我试过这个:
create or replace function c3 (arg char(3))
returns void
language plpgsql as
$$
begin
raise notice 'Value: %', arg;
end;
$$;
但它接受三个以上的字符:
select c3('1234');
我试过这个:
create or replace function c3 (arg char(3))
returns void
language plpgsql as
$$
begin
raise notice 'Value: %', arg;
end;
$$;
但它接受三个以上的字符:
select c3('1234');
函数参数中的数据类型修饰符(如
char(3)
)将被 忽略CREATE FUNCTION
。手册:您仍然可以通过在调用中添加显式强制转换来使用原始函数:
但这只是给猪涂口红而已。
正确的解决方案
添加显式测试:
或者默默地强制转换或截断输入以避免异常:
并且永远不要使用旧数据类型
char(N)
(即使这不是这里的直接问题)。看: