PostgreSQL
 sql >> Teknologi Basis Data >  >> RDS >> PostgreSQL

hanya mengatur variabel dalam skrip psql jika tidak ditentukan pada baris perintah

Menyetel nilai default untuk variabel tidak didukung di psql, tetapi Anda dapat melakukannya menggunakan solusi.

Perintah psql ini:

\set myVar :myVar

tidak melakukan apa-apa jika variabel sudah disetel melalui psql (ini berarti, myVar disetel lagi ke nilainya), jika tidak, variabel disetel secara harfiah ke string :myVar .

Menggunakan keadaan ini dan perintah psql lainnya \gset , Anda sebenarnya dapat menetapkan nilai default untuk myVar. Letakkan ini di atas skrip sql Anda:

\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

Tampaknya hanya berfungsi dengan variabel teks, tetapi Anda dapat mentransmisikan ke numerik jika Anda membutuhkan variabel numerik:

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

Bagaimana \gset bekerja:

\gset memungkinkan Anda untuk mengatur variabel dari hasil kueri pemilihan. Variabel hasil dinamai seperti nama kolom, inilah mengapa Anda memerlukan klausa AS "myVar" di akhir kueri (jangan lupa tanda kutip ganda jika Anda ingin menggunakan nama variabel dengan huruf besar).

Misalnya perintah:

SELECT 'hello' AS var1 \gset

menyetel variabel var1 untuk hello , sama dengan

\set var1 hello

Lihat di sini untuk info lebih lanjut:http://www.postgresql.org /docs/9.4/static/app-psql.html



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Kapan Koneksi ditutup saat memanggil .close() JooQ DSLContext, jika ada?

  2. Bagaimana Fungsi Exp() Bekerja di PostgreSQL

  3. Menyetel batas waktu koneksi dengan PDO

  4. Dimungkinkan untuk memanggil fungsi dalam skema lain dari dalam fungsi plv8?

  5. Potong string setelah kemunculan karakter pertama