Clickhouse Version: 21.10.2.15 

After a quick test, I couldn't make a function using a query as a statement

**Use case**

It is useful to have some prepared queries that could work as functions

**Describe the solution you'd like**

```sql
CREATE FUNCTION plus_tutu as () -> ((select `orderYM` from `bucket_18`.`flattable` limit 1))
```

{
    const auto * args_tuple = function->as<ASTFunction>()->arguments->children.at(0)->as<ASTFunction>();
    std::unordered_set<String> arguments;
    for (const auto & argument : args_tuple->arguments->children)
    {
        const auto & argument_name = argument->as<ASTIdentifier>()->name();
        auto [_, inserted] = arguments.insert(argument_name);
        if (!inserted)
            throw Exception(ErrorCodes::UNSUPPORTED_METHOD, "Identifier {} already used as function parameter", argument_name);
    }
    ASTPtr function_body = function->as<ASTFunction>()->children.at(0)->children.at(1);
    validateFunctionRecursiveness(function_body, name);
}
void InterpreterCreateFunctionQuery::validateFunctionRecursiveness(ASTPtr node, const String & function_to_create)
{
    for (const auto & child : node->children)
    {
        auto function_name_opt = tryGetFunctionName(child);
        if (function_name_opt && function_name_opt.value() == function_to_create)
            throw Exception(ErrorCodes::CANNOT_CREATE_RECURSIVE_FUNCTION, "You cannot create recursive function");
        validateFunctionRecursiveness(child, function_to_create);
    }
}
}