This should be easy
url_domain || url_path || url_query_params as request
really should work.
BUT if any one of these is null it will deliver a null string
So you need
nvl(url_domain,”) || nvl(url_path,”) || nvl(url_query_params,”) as request
This replaces a Null with a blank.
Why can’t it do this anyway? Who knows.