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 ?

4voto

davidleongz Points 121

Pour utiliser les variables dans par exemple alter table :

DO $$ 
DECLARE name_pk VARCHAR(200);
BEGIN
select constraint_name
from information_schema.table_constraints
where table_schema = 'schema_name'
      and table_name = 'table_name'
      and constraint_type = 'PRIMARY KEY' INTO name_pk;
IF (name_pk := '') THEN
EXECUTE 'ALTER TABLE schema_name.table_name DROP CONSTRAINT ' || name_pk;

3voto

Shane Kenyon Points 1156

En s'appuyant sur la réponse de @nad2000 et de La réponse de @Pavel ici c'est là que je me suis retrouvé pour mes scripts de migration Flyway. Manipulation pour les scénarios où le schéma de la base de données a été modifié manuellement.

DO $$
BEGIN
    IF NOT EXISTS(
        SELECT TRUE FROM pg_attribute 
        WHERE attrelid = (
            SELECT c.oid
            FROM pg_class c
            JOIN pg_namespace n ON n.oid = c.relnamespace
            WHERE 
                n.nspname = CURRENT_SCHEMA() 
                AND c.relname = 'device_ip_lookups'
            )
        AND attname = 'active_date'
        AND NOT attisdropped
        AND attnum > 0
        )
    THEN
        RAISE NOTICE 'ADDING COLUMN';        
        ALTER TABLE device_ip_lookups
            ADD COLUMN active_date TIMESTAMP;
    ELSE
        RAISE NOTICE 'SKIPPING, COLUMN ALREADY EXISTS';
    END IF;
END $$;

2voto

Nick Points 978

Je devais faire quelque chose comme ça

CREATE OR REPLACE FUNCTION MYFUNC()
RETURNS VOID AS $$
DO
$do$
BEGIN
DECLARE
 myvar int;
 ...
END
$do$
$$ LANGUAGE SQL;

2voto

Jasen Points 247

Postgresql ne dispose pas de variables nues, vous pourriez utiliser une table temporaire. Les variables ne sont disponibles que dans les blocs de code ou en tant que fonctionnalité de l'interface utilisateur.

Si vous avez besoin d'une variable simple, vous pouvez utiliser une table temporaire :

CREATE TEMP TABLE list AS VALUES ('foobar');

SELECT dbo.PubLists.*
FROM   dbo.PubLists,list
WHERE  Name = list.column1;

1voto

Milen A. Radev Points 20462

Pour le client CLI officiel "psql", voir aquí . Et "pgAdmin3" 1.10 (toujours en version bêta) a " pgScript ".

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