I have this function http://rextester.com/VIHMIG61446
CREATE OR REPLACE FUNCTION myTestProcedure(namevalue character varying)
RETURNS TABLE(id integer, name character varying, isdefault boolean)
LANGUAGE plpgsql
AS $function$
BEGIN
IF EXISTS(SELECT
Domain.id,
Domain.name,
Domain.isdefault
FROM Domain
where lower(Domain.name) like namevalue)
THEN
RETURN QUERY SELECT
Domain.id,
Domain.name,
Domain.isdefault
FROM Domain
where lower(Domain.name) like namevalue;
ELSE
RETURN QUERY SELECT
Domain.id,
Domain.name,
Domain.isdefault
FROM Domain
where Domain.isdefault = true;
END IF;
END
$function$;
and I'm looking a way to not repeat the whole query on the if, so I decided to use with as
to store the result but it does not work for me http://rextester.com/MVMVA73088
How should I use with as
?
CREATE OR REPLACE FUNCTION myTestProcedure(namevalue character varying)
RETURNS TABLE(id integer, name character varying, isdefault boolean)
LANGUAGE plpgsql
AS $function$
BEGIN
with temporal_result as (
SELECT
Domain.id,
Domain.name,
Domain.isdefault
FROM Domain
where lower(Domain.name) like namevalue
)
IF EXISTS(temporal_result)
THEN
RETURN QUERY SELECT * from temporal_result;
ELSE
RETURN QUERY SELECT
Domain.id,
Domain.name,
Domain.isdefault
FROM Domain
where Domain.isdefault = true;
END IF;
END
$function$;