PostgreSQL
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> PostgreSQL

chỉ đặt biến trong psql-script nếu không được chỉ định trên dòng lệnh

Đặt giá trị mặc định cho các biến không được hỗ trợ trong psql, nhưng bạn có thể thực hiện việc này bằng cách sử dụng một giải pháp khác.

Lệnh psql này:

\set myVar :myVar

không có gì nếu biến đã được đặt qua psql (điều này có nghĩa là, myVar được đặt lại thành giá trị của anh ấy), nếu không biến được đặt theo nghĩa đen thành chuỗi :myVar .

Sử dụng trường hợp này và lệnh psql khác \gset , bạn thực sự có thể đặt giá trị mặc định cho myVar. Đặt cái này lên đầu tập lệnh sql của bạn:

\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

Nó dường như chỉ hoạt động với các biến văn bản, nhưng bạn có thể truyền sang số nếu bạn cần các biến số:

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

\ gset hoạt động như thế nào:

\gset cho phép bạn đặt một biến từ kết quả của một truy vấn chọn. Biến kết quả được đặt tên giống như tên cột, đây là lý do tại sao bạn cần mệnh đề AS "myVar" ở cuối truy vấn (đừng quên dấu ngoặc kép nếu bạn muốn sử dụng tên biến có chữ hoa).

Ví dụ lệnh:

SELECT 'hello' AS var1 \gset

đặt biến var1 gửi đến hello , giống như

\set var1 hello

Xem tại đây để biết thêm thông tin: 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. Các truy vấn được tham số hóa với psycopg2 / Python DB-API và PostgreSQL

  2. Ứng dụng Spring Boot bị kẹt trên Hikari-Pool-1 - Đang khởi động ...

  3. tham chiếu không hợp lệ đến mục nhập mệnh đề FROM cho bảng trong truy vấn Postgres

  4. Số nguyên nằm ngoài phạm vi trong cơ sở dữ liệu PostgreSQL

  5. Postgres + Hibernate + Java UUID