Come si usano le variabili in un semplice script PostgreSQL?

Ad esempio, in MS-SQL, è ansible aprire una finestra di query ed eseguire quanto segue:

DECLARE @List AS VARCHAR(8) SELECT @List = 'foobar' SELECT * FROM dbo.PubLists WHERE Name = @List 

Come viene fatto in PostgreSQL? Può essere fatto?

La risposta completa si trova nella documentazione ufficiale di PostgreSQL .

È ansible utilizzare la nuova funzionalità di blocco di codice anonimo 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 $$; 

Inoltre puoi ottenere l’ultimo ID di inserimento :

 DO $$ DECLARE lastid bigint; BEGIN INSERT INTO test (name) VALUES ('Test Name') RETURNING id INTO lastid; SELECT * FROM test WHERE id = lastid; END $$; 
 DO $$ DECLARE a integer := 10; b integer := 20; c integer; BEGIN c := a + b; RAISE NOTICE'Value of c: %', c; END $$; 

Puoi usare:

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

Questo funzionerà

Ecco un esempio di utilizzo di una variabile in 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 

Dai un’occhiata ai documenti di plpgsql per maggiori informazioni.

Mi sono imbattuto in altri documenti che usano \set per dichiarare la variabile di scripting ma il valore sembra essere come un valore costante e sto trovando un modo che può essere considerato come una variabile non una variabile costante.

Ex:

 \set Comm 150 select sal, sal+:Comm from emp 

Qui sal è il valore che è presente nella tabella ’emp’ e comm è il valore costante.

Dovevo fare qualcosa del genere

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

Per il client CLI ufficiale “psql” vedi qui . E “pgAdmin3″ 1.10 (ancora in beta) ha ” pgScript “.

Postgresql non ha variabili nude, potresti usare una tabella temporanea. le variabili sono disponibili solo nei blocchi di codice o come funzionalità dell’interfaccia utente.

Se hai bisogno di una variabile nuda potresti usare una tabella temporanea:

 CREATE TEMP TABLE list AS VALUES ('foobar'); SELECT dbo.PubLists.* FROM dbo.PubLists,list WHERE Name = list.column1;