I have this function:
CREATE OR REPLACE FUNCTION public.sp_rptadvsalincr(
p_flag character,
p_empcds character varying,
p_incrtype character varying)
RETURNS SETOF "TABLE(empcd character, name character varying, basic integer, incrdt timestamp without time zone, incrdbasic integer, nextincrdt timestamp without time zone, deptgenno character varying)"
LANGUAGE 'plpgsql'
COST 100.0
VOLATILE NOT LEAKPROOF
ROWS 1000.0
AS $function$
When executed, it shows this error:
ERROR: type "TABLE(empcd character, name character varying, basic integer, i" does not exist
NOTICE: identifier "TABLE(empcd character, name character varying, basic integer, incrdt timestamp without time zone, incrdbasic integer, nextincrdt timestamp without time zone, deptgenno character varying)" will be truncated to "TABLE(empcd character, name character varying, basic integer, i"
Why do I get this error, and how can I fix it?
Erwin Brandstetter
669k160 gold badges1.2k silver badges1.3k bronze badges
2 Answers 2
It's either:
RETURNS TABLE (...)
or:
RETURNS SETOF sometype
You have an illegal mix of both forms. Looks like you replaced a double-quoted type name with a custom table definition. This would work:
CREATE OR REPLACE FUNCTION public.sp_rptadvsalincr(
p_flag character,
p_empcds character varying,
p_incrtype character varying)
RETURNS TABLE(empcd character, name character varying, basic integer, incrdt timestamp without time zone, incrdbasic integer, nextincrdt timestamp without time zone, deptgenno character varying)
LANGUAGE plpgsql
COST 100
VOLATILE NOT LEAKPROOF
ROWS 1000
AS $function$
BEGIN
RETURN QUERY
SELECT NULL::char, NULL::varchar, NULL::int, NULL::timestamp, NULL::int, NULL::timestamp, NULL::varchar;
END
$function$;
Call:
SELECT * FROM pg_temp.sp_rptadvsalincr('a','b','c');
answered May 9, 2017 at 14:19
Erwin Brandstetter
669k160 gold badges1.2k silver badges1.3k bronze badges
Sign up to request clarification or add additional context in comments.
Comments
Remove the double quotes around TABLE(...).
answered May 9, 2017 at 12:34
Laurenz Albe
258k22 gold badges314 silver badges391 bronze badges
Comments
lang-sql
setofbecause RETURNS TABLE implies set and PostgreSQL will return error if you attempt to mix those.