it-swarm.com.de

Speichern Sie das Abfrageergebnis in einer Variablen mit PL/pgSQL

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?

75
Sathish

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.

123
mu is too short

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.

48

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.

16
Pavel Stehule

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();

Demo: enter image description here

1
Ram Pukar

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;
0
rinku Choudhary