sql >> Databáze >  >> RDS >> PostgreSQL

nastavte proměnnou ve skriptu psql, pouze pokud není uvedena na příkazovém řádku

Nastavení výchozích hodnot pro proměnné není v psql podporováno, ale můžete to udělat pomocí náhradního řešení.

Tento příkaz psql:

\set myVar :myVar

nedělá nic, pokud byla proměnná již nastavena přes psql (to znamená, že myVar je nastavena znovu na svou hodnotu), jinak je proměnná nastavena doslova na řetězec :myVar .

Pomocí této okolnosti a dalšího příkazu psql \gset , můžete ve skutečnosti nastavit výchozí hodnotu pro myVar. Umístěte toto na začátek skriptu SQL:

\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

Zdá se, že funguje pouze s textovými proměnnými, ale pokud potřebujete číselné proměnné, můžete přetypovat na numerické:

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

Jak \gset funguje:

\gset umožňuje nastavit proměnnou z výsledku výběrového dotazu. Proměnná result se jmenuje jako název sloupce, proto potřebujete klauzuli AS "myVar" na konci dotazu (nezapomeňte na dvojité uvozovky, pokud chcete používat názvy proměnných s velkými písmeny).

Například příkaz:

SELECT 'hello' AS var1 \gset

nastavuje proměnnou var1 hello , stejně jako

\set var1 hello

Další informace naleznete zde:http://www.postgresql.org /docs/9.4/static/app-psql.html



  1. Bash skript pro vložení hodnot do MySQL

  2. Oracle DBMS - Přečtěte si tabulku před zpracováním Aktualizace ve spouštěči AFTER - mutující tabulka

  3. psql:FATAL:role tulák neexistuje

  4. Výsledkem rozdělení je dotaz na součet