Ich erhalte den Fehler akzeptieren kann:mengenwertigen Funktion in Zusammenhang genannt, die nicht einen Satz
set-valued function called in context that cannot accept a set
wenn diese Funktion bei RETURN QUERY EXECUTE
Zeilen ausführen:
PLSQL $ cat lookup_email.pl
CREATE OR REPLACE FUNCTION app.lookup_email(ident_id bigint,sess bigint,company_id bigint,email varchar)
RETURNS SETOF RECORD as $$
DECLARE
rec RECORD;
comp_id bigint;
server_session bigint;
schema_name varchar;
query varchar;
BEGIN
schema_name:='comp' || company_id;
select app.session.session into server_session from app.session where app.session.identity_id=ident_id and app.session.session=sess;
IF FOUND
THEN
BEGIN
query:='SELECT i.email,u.user_id FROM app.identity as i,' || schema_name || '.uzer as u WHERE i.email like ''%' || email || '%'' and i.identity_id=u.identity_id';
RAISE NOTICE 'executing: %',query;
RETURN QUERY EXECUTE query;
RETURN;
EXCEPTION
WHEN OTHERS THEN
RAISE NOTICE ' query error (%)',SQLERRM;
END;
END IF;
END;
$$ LANGUAGE plpgsql;
Dies ist der Ausgang von psql:
dev=> select app.lookup_email(4,730035455897450,6,'u');
NOTICE: executing: SELECT i.email,u.user_id FROM app.identity as i,comp6.uzer as u WHERE i.email like '%u%' and i.identity_id=u.identity_id
NOTICE: query error (set-valued function called in context that cannot accept a set)
lookup_email
--------------
(0 rows)
Ich weiß, dass die Abfrage keinen Fehler enthält, weil es in einer anderen psql-Sitzung funktioniert:
dev=> SELECT i.email,u.user_id FROM app.identity as i,comp6.uzer as u WHERE i.email like '%u%' and i.identity_id=u.identity_id;
email | user_id
----------------+---------
[email protected] | 1
(1 row)
Warum beschwert Postgres, wenn ich meine Funktion als RETURNS SETOF RECORD
Wesen erklärt? Wo ist mein Fehler?
Was Evan erklärt, ist alles richtig und gut, aber Sie sollten diesen Fehler mit dem aktuellen Postgres nicht bekommen. Was ist deine Version? ('SELECT version()') –