I am not expert for MySQL, but reading documentation:
"A procedure is invoked using a CALL statement (see Section 12.2.1, “CALL Syntax”), and can only pass back values using output variables. A function can be called from inside a statement just like any other function (that is, by invoking the function's name), and can return a scalar value. "
IMHO this does not speak about returning recordsets, but:
"MySQL supports the very useful extension that allows the use of regular SELECT statements (that is, without using cursors or local variables) inside a stored procedure. The result set of such a query is simply sent directly to the client."
So what is the conclusion ? ;-)))
Looking into mysqlconn.inc:
function TConnectionName.StrToStatementType(s : string) : TStatementType;
begin
S:=Lowercase(s);
if s = 'show' then exit(stSelect);
result := inherited StrToStatementType(s);
end;
There is not handled "call" like "selectable" ... in some cases it may be bug!!! So you can post bug report.
Correction may be done:
function TConnectionName.StrToStatementType(s : string) : TStatementType;
begin
S:=Lowercase(s);
if s = 'show' then exit(stSelect);
if s = 'call' then exit(stExecProcedure);
result := inherited StrToStatementType(s);
end;