Wie kann ich das Ergebnis einer Abfrage einer Variablen in PL/pgSQL, der prozeduralen Sprache von PostgreSQL, zuordnen?
Ich habe eine Funktion:
CREATE OR REPLACE FUNCTION test(x numeric)
RETURNS character varying AS
$BODY$
DECLARE
name character varying(255);
begin
name ='SELECT name FROM test_table where id='||x;
if(name='test')then
--do somthing
else
--do the else part
end if;
end;
return -- return my process result here
$BODY$
LANGUAGE plpgsql VOLATILE
In der obigen Funktion muss ich das Ergebnis dieser Abfrage speichern:
'SELECT name FROM test_table where id='||x;
auf die Variable name
.
Wie verarbeite ich das?
Ich denke, Sie suchen SELECT INTO
:
select test_table.name into name from test_table where id = x;
Dadurch wird name
aus test_table
gezogen, wobei id
das Argument Ihrer Funktion ist und in der Variable name
belassen wird. Lassen Sie das Tabellennamenpräfix auf test_table.name
nicht aus, da Sie Beschwerden über einen mehrdeutigen Verweis erhalten.
Solange Sie eine einzelne Variable zuweisen, können Sie auch eine einfache Zuordnung in einer plpgsql-Funktion verwenden:
name := (SELECT t.name from test_table t where t.id = x);
Oder verwenden Sie SELECT INTO
wie @mu bereits angegeben .
Das funktioniert auch:
name := t.name from test_table t where t.id = x;
Verwenden Sie jedoch eine der ersten beiden klareren Methoden, wie @Pavel kommentiert.
Ich habe die Syntax zusätzlich mit einem Tabellenalias gekürzt.
Update: Ich habe mein Codebeispiel entfernt und möchte IF EXISTS()
anstelle von verwenden, das von @Pavel bereitgestellt wird.
Das übliche Muster ist EXISTS(subselect)
:
BEGIN
IF EXISTS(SELECT name
FROM test_table t
WHERE t.id = x
AND t.name = 'test')
THEN
---
ELSE
---
END IF;
Dieses Muster wird in PL/SQL, PL/pgSQL, SQL/PSM, ... verwendet.
Lerntabelle erstellen:
CREATE TABLE "public"."learning" (
"api_id" int4 DEFAULT nextval('share_api_api_id_seq'::regclass) NOT NULL,
"title" varchar(255) COLLATE "default"
);
Datenlerntabelle einfügen:
INSERT INTO "public"."learning" VALUES ('1', 'Google AI-01');
INSERT INTO "public"."learning" VALUES ('2', 'Google AI-02');
INSERT INTO "public"."learning" VALUES ('3', 'Google AI-01');
Schritt: 01
CREATE OR REPLACE FUNCTION get_all (pattern VARCHAR) RETURNS TABLE (
learn_id INT,
learn_title VARCHAR
) AS $$
BEGIN
RETURN QUERY SELECT
api_id,
title
FROM
learning
WHERE
title = pattern ;
END ; $$ LANGUAGE 'plpgsql';
Schritt: 02
SELECT * FROM get_all('Google AI-01');
Schritt: 03
DROP FUNCTION get_all();
Sie können das folgende Beispiel verwenden, um ein Abfrageergebnis mithilfe von PL/pgSQL in einer Variablen zu speichern:
select * into demo from maintenanceactivitytrack ;
raise notice'p_maintenanceid:%',demo;