sql >> Database teknologi >  >> RDS >> PostgreSQL

Indstil kun variabel i psql-script, hvis den ikke er angivet på kommandolinjen

Indstilling af standardværdier for variabler understøttes ikke i psql, men du kan gøre det ved at bruge en løsning.

Denne psql-kommando:

\set myVar :myVar

gør intet, hvis variablen allerede var sat via psql (dette betyder, at myVar er sat igen til sin værdi), ellers er variablen sat bogstaveligt til strengen :myVar .

Ved at bruge denne omstændighed og den anden psql-kommando \gset , kan du faktisk indstille en standardværdi for myVar. Sæt dette øverst i dit 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

Det ser ud til kun at fungere med tekstvariabler, men du kan caste til numeriske, hvis du har brug for numeriske variable:

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

Hvordan virker \gset:

\gset giver dig mulighed for at indstille en variabel fra resultatet af en udvalgt forespørgsel. Resultatvariablen er navngivet som kolonnenavnet, det er derfor, du har brug for klausulen AS "myVar" i slutningen af ​​forespørgslen (glem ikke de dobbelte anførselstegn, hvis du vil bruge variabelnavne med store bogstaver).

For eksempel kommandoen:

SELECT 'hello' AS var1 \gset

indstiller variablen var1 til hello , det samme som

\set var1 hello

Se her for mere info:http://www.postgresql.org /docs/9.4/static/app-psql.html



  1. Behov for at integrere IDX MLS til et websted

  2. sqljocky forespørger databasen synkront

  3. Bizar fejl ved forsøg på at oprette forbindelse til databasen

  4. SQL . SP eller funktionen skal beregne den næste dato for fredag