CREATE OR REPLACE PROCEDURE test1(OUT i int)
LANGUAGE plpgsql AS
$$
  BEGIN
    i:=10;
end;
$$;

CALL test1(1); --Works. Return 10. Passed value is ignored.
CALL test(); --Doesn't work. ERROR: procedure test1() does not exist Hint: No procedure matches the given name and argument types. You might need to add explicit type casts. Position: 6

The passed argument won’t be assigned as initial value if it is OUT. I know both OUT and INOUT parameter of the procedure must correspond to a variable in the CALL statement. But why does it implemented this way?. Is there any specific reason or it is what it is?