sql >> Database >  >> RDS >> PostgreSQL

alleen variabele instellen in psql-script indien niet gespecificeerd op de opdrachtregel

Het instellen van standaardwaarden voor variabelen wordt niet ondersteund in psql, maar u kunt dit doen met een tijdelijke oplossing.

Dit psql-commando:

\set myVar :myVar

doet niets als de variabele al was ingesteld via psql (dit betekent dat myVar weer op zijn waarde wordt gezet), anders wordt de variabele letterlijk op de tekenreeks :myVar gezet .

Met deze omstandigheid en het andere psql-commando \gset , kunt u een standaardwaarde instellen voor myVar. Zet dit bovenaan je sql-script:

\set myVar :myVar
-- now myVar is set to the string ':myVar' if was not already set.
-- Checking it using a CASE statement:
SELECT CASE 
  WHEN :'myVar'= ':myVar'
  THEN 'default_value' 
  ELSE :'myVar' 
END AS "myVar"  \gset -- < \gset call at end of the query

Het lijkt alleen te werken met tekstvariabelen, maar je kunt casten naar numeriek als je numerieke variabelen nodig hebt:

SELECT CASE 
  WHEN :'myVar'= ':myVar'
  THEN '10' 
  ELSE :'myVar' 
END::numeric AS "myVar"  \gset

Hoe werkt \gset:

\gset stelt u in staat een variabele in te stellen op basis van het resultaat van een selectiequery. De resultaatvariabele heeft dezelfde naam als de kolomnaam, daarom heb je de clausule AS "myVar" nodig aan het einde van de query (vergeet de dubbele aanhalingstekens niet als u namen van variabelen met hoofdletters wilt gebruiken).

Bijvoorbeeld het commando:

SELECT 'hello' AS var1 \gset

stelt de variabele var1 in naar hello , hetzelfde als

\set var1 hello

Zie hier voor meer informatie:http://www.postgresql.org /docs/9.4/static/app-psql.html



  1. optionele parameters in SQL Server opgeslagen proc?

  2. Dichtstbijzijnde record voor een reeks datums

  3. host 'localhost' mag geen verbinding maken met deze MySQL-server (#1130)

  4. PostgreSQL-prestaties benchmarken met Sysbench