Ich habe Funktion in PostgreSQL, wenn ich die Ergebnisse zurückgeben möchte ich eine Fehlermeldung anzeigt:Wie kann ich das Ergebnis der Abfrage in Postgres zurückgeben?
ERROR: query has no destination for result data
HINT: If you want to discard the results of a SELECT, use PERFORM instead.
Hier wird Zusammenfassung meiner Funktion (es ist zu lange kopieren/einfügen hier alle Code)
CREATE OR REPLACE FUNCTION "schema"."test"(IN Id int8,)
RETURNS TABLE("Id" uuid, "SiteId" uuid, "Domain" varchar,
"JumpCost" numeric, "CPMCost" numeric, "PaymentModel" int8, "ComputedEpm" numeric,
"ClickedCampaignId" int8, "MainRubricId" int8, "ShowSlider" bool,
"ShowGoods" bool, "ShowTeaser" bool, "BidLimitCoeff" numeric,
"RtbActiveSiteStatByBannerId" int8, "ShowType" int8, "MinAge" int8) AS
$BODY$
DECLARE
rtbCampaignEpmCoeff NUMERIC(18,6);
maxRubricShows int;
showsRubricAddedPerClick int;
siteLossLimitPerRubric NUMERIC(18,6);
rtbMinRubricVisitsToShow int;
showAdsToUsersWithoutInterests boolean;
BEGIN
......
DO
$do$
......
$do$;
PERFORM "Id", "SiteId", "Domain", "JumpCost", "CPMCost", "PaymentModel",
5 as ComputedEpm, "ClickedCampaignId", "MainRubricId", "ShowSlider",
"ShowGoods", "ShowTeaser", "BidLimitCoeff", "RtbActiveSiteStatByBannerId",
"ShowType", "MinAge"
FROM mytable
ORDER BY "FromClick" DESC, "Similarity" DESC, "rn", random()
LIMIT 1;
END;
$BODY$
LANGUAGE plpgsql
COST 100
CALLED ON NULL INPUT
SECURITY INVOKER
VOLATILE;
Wie Sie sehen, habe ich "PERFORM" verwendet, um Ergebnisse zurückzugeben, aber mit Fehler fehlgeschlagen, erklärte ich.
Auch ich habe "Return query .." und habe den gleichen Fehler.
"Mytable" ist temporäre Tabelle, die ich in Funktion erstellt habe.
Wie kann ich dieses Ergebnis zurückgeben?
Sie wollen 'Rückfrage '. Siehe das Handbuch für Details, es ist alles dort erklärt: https://www.postgresql.org/docs/current/static/plpgsql-control-structures.html#PLPGSQL-STATEMENTS-RETURNING Unrelated, aber: Sie sollten ** wirklich * * vermeiden Sie diese gefürchteten zitierten Identifikatoren, sie sind viel mehr Ärger als sie es wert sind. –
Warum verwenden Sie einen anonymen "DO" -Code, wenn Sie bereits in einer Funktion sind? –
Eines Ihrer Probleme besteht darin, dass Sie dieselben Namen für die Ausgabeparameter und die Spalten der Tabelle verwenden, die Sie zurückgeben möchten. Das führt zu Namenskollisionen und überraschenden Fehlern, die schwer zu debuggen sind. Vermeiden Sie es, indem Sie die Ausgabeparameter anders benennen, wie 'p_id' und' p_siteid'. Und übrigens, möglichst Groß- und Kleinschreibung vermeiden. –