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