127 votes

Comment utiliser les variables dans un simple script PostgreSQL ?

Par exemple, dans MS-SQL, vous pouvez ouvrir une fenêtre de requête et exécuter ce qui suit :

DECLARE @List AS VARCHAR(8)

SELECT @List = 'foobar'

SELECT *
FROM   dbo.PubLists
WHERE  Name = @List

Comment cela se fait-il dans PostgreSQL ? Est-il possible de le faire ?

156voto

nad2000 Points 1247

La réponse complète se trouve dans le documentation officielle de PostgreSQL .

Vous pouvez utiliser la nouvelle fonctionnalité de bloc de code anonyme de PG9.0 ( http://www.postgresql.org/docs/9.1/static/sql-do.html )

DO $$
DECLARE v_List TEXT;
BEGIN
  v_List := 'foobar' ;
  SELECT *
  FROM   dbo.PubLists
  WHERE  Name = v_List;
  -- ...
END $$;

Vous pouvez également obtenir le dernier insérer id :

DO $$
DECLARE lastid bigint;
BEGIN
  INSERT INTO test (name) VALUES ('Test Name') 
  RETURNING id INTO lastid;

  SELECT * FROM test WHERE id = lastid;
END $$;

50voto

DO $$
DECLARE  
   a integer := 10;  
   b integer := 20;  
   c integer;  
BEGIN  
   c := a + b;
    RAISE NOTICE'Value of c: %', c;
END $$;

33voto

Karim de Alba Points 31

Vous pouvez utiliser :

\set list '''foobar'''
SELECT * FROM dbo.PubLists WHERE name = :list;

Cela fera l'affaire.

13voto

overthink Points 9471

Voici un exemple d'utilisation d'une variable dans plpgsql :

create table test (id int);
insert into test values (1);
insert into test values (2);
insert into test values (3);

create function test_fn() returns int as $$
    declare val int := 2;
    begin
        return (SELECT id FROM test WHERE id = val);
    end;
$$ LANGUAGE plpgsql;

SELECT * FROM test_fn();
 test_fn 
---------
       2

Jetez un coup d'œil à la Docs plpgsql pour plus d'informations.

7voto

Vinodraj Points 11

Je suis tombé sur d'autres documents qu'ils utilisent \set pour déclarer une variable de script mais la valeur semble être une valeur constante et je cherche un moyen de l'utiliser comme une variable et non comme une variable constante.

Ex :

\set Comm 150

select sal, sal+:Comm from emp

Ici sal est la valeur qui est présente dans la table 'emp' et comm est la valeur constante.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X