在 PostgreSQL 查詢中宣告一個變數

David Mbochi Njonge 2023年1月30日 2022年5月14日
  1. 在 PostgreSQL 查詢中宣告一個變數
  2. 在 PostgreSQL 查詢中使用 WITH 子句來宣告一個變數
  3. 使用 PostgreSQL 過程語言在 PostgreSQL 查詢中宣告變數
  4. 使用動態配置設定在 PostgreSQL 查詢中宣告變數
在 PostgreSQL 查詢中宣告一個變數

變數是程式中用於儲存使用特定資料型別宣告的資料的臨時記憶體分配。一旦執行完成,變數上的資料將被丟棄,並且需要持久儲存以在需要時檢索資料。

在本教程中,我們將學習在 PostgreSQL 中建立變數並使用該變數對資料庫執行查詢的不同方法。

在 PostgreSQL 查詢中宣告一個變數

使用以下命令登入 PostgreSQL 伺服器。

david@david-HP-ProBook-6470b:~$ psql -U postgres
Password for user postgres:

在開啟的提示中輸入你的密碼,然後按鍵盤上的 Enter 按鈕。

psql (14.2 (Ubuntu 14.2-1.pgdg18.04+1))
Type "help" for help.

建立一個名為 variable_db 的資料庫,我們將使用它來建立一個用於測試目的的表。

postgres=# create database variable_db;
CREATE DATABASE

使用以下命令連線到我們剛剛建立的資料庫。

postgres=# \c variable_db;
You are now connected to database "variable_db" as user "postgres".

連線到資料庫,我們剛剛建立確保我們執行的任何資料定義語言或操作語言隻影響 variable_db 資料庫。

建立一個名為 vehicle 的表,其中包含欄位 idvehicle_namevehicle_typevehicle_modelvehicle_price

vehicle_namevehicle_typevehicle_model 欄位是型別 string,而 idvehicle_price 欄位是型別 integer

variable_db=# create table vehicle(vehicle_name varchar(30), vehicle_type varchar(30), vehicle_model varchar(30), vehicle_price integer, id SERIAL UNIQUE NOT NULL, PRIMARY KEY(id));
CREATE TABLE

將三個記錄插入表中,為你新增的每個車輛例項提供名稱、型別、型號和價格。

將下面的 SQL 命令複製並貼上到你的終端上,然後按鍵盤上的 Enter

variable_db=# insert into vehicle(vehicle_name, vehicle_type, vehicle_model, vehicle_price) values('Jaguar Range Rover Evoque','4WD','2019 Model',7000000);
INSERT 0 1

variable_db=# insert into vehicle(vehicle_name, vehicle_type, vehicle_model, vehicle_price) values('Porsche Cayenne','4WD','2019 Model',7000000);
INSERT 0 1

variable_db=# insert into vehicle(vehicle_name, vehicle_type, vehicle_model, vehicle_price) values('BMW 1 Series','4WD','2019 Model',7000000);
INSERT 0 1

我們將使用上面建立的表中的資料來學習建立變數並使用變數執行查詢的不同方法。

在 PostgreSQL 查詢中使用 WITH 子句來宣告一個變數

將以下程式碼複製並貼上到你的終端上,然後按鍵盤上的 Enter 按鈕。

variable_db=# WITH prices AS(SELECT 7000000 as carprices)
SELECT vehicle_name  FROM vehicle, prices WHERE vehicle_price = prices.carprices;

WITH 子句允許我們建立臨時表並新增一個 select 查詢與別名結合以建立列的臨時變數。

別名使用關鍵字 AS 後跟一個包含描述性名稱的變數名,以避免在執行過程中混淆。

臨時表 prices 包含一個臨時變數,其中包含值 7000000;我們使用臨時變數來查詢所有表格中哪些車輛具有該價格。以下是查詢的結果。

       vehicle_name
---------------------------
 Jaguar Range Rover Evoque
 Porsche Cayenne
 BMW 1 Series
(3 rows)

使用 PostgreSQL 過程語言在 PostgreSQL 查詢中宣告變數

要建立過程語言,請建立一個名為 procedure.sql 的檔案並將以下過程寫入該檔案。你可以將程式碼複製並貼上到檔案中。

DO $$
DECLARE price integer;
BEGIN
       SELECT 7000000 INTO price;
       DROP TABLE IF EXISTS expvehicles;
       CREATE TABLE expvehicles AS
       SELECT vehicle_name FROM vehicle WHERE vehicle_price = price;
END $$;
SELECT * FROM  expvehicles;

該過程建立了一個名為 price 的變數,它的值是 70000000。我們將使用此變數來過濾以該值定價的車輛。

查詢結果將儲存在名為 expvehicles 的臨時表中。該過程的最後一條語句執行一個 select 查詢,返回所有價格為 7000000 的車輛。

將下面的命令複製並貼上到你的終端中以執行此檔案,然後按鍵盤上的 Enter 按鈕。

variable_db=# \i /home/david/Documents/work/upwork/jhinku-tutorials/procedure.sql
DO

上述命令返回一個包含車輛名稱的表,但該表不是臨時表,執行後資料會丟失。

       vehicle_name
---------------------------
 Jaguar Range Rover Evoque
 Porsche Cayenne
 BMW 1 Series
(3 rows)

使用動態配置設定在 PostgreSQL 查詢中宣告變數

我們使用 set 關鍵字在動態配置設定中的會話級別或本地級別宣告變數。

在會話級別宣告的變數使用 session 關鍵字,而在本地級別設定的變數使用 local 關鍵字。

使用以下命令設定名為 price 的會話變數。將程式碼複製並貼上到你的終端中,然後按 Enter 按鈕。

variable_db=# set session my.vars.price = '7000000';
SET

執行一個查詢,使用我們宣告的變數來查詢價格為 7000000 的車輛。使用以下程式碼實現上述任務。

variable_db=# SELECT vehicle_name FROM vehicle WHERE vehicle_price = current_setting('my.vars.price')::int;

以下是執行上述查詢的結果。

       vehicle_name
---------------------------
 Jaguar Range Rover Evoque
 Porsche Cayenne
 BMW 1 Series
(3 rows)
David Mbochi Njonge avatar David Mbochi Njonge avatar

David is a back end developer with a major in computer science. He loves to solve problems using technology, learning new things, and making new friends. David is currently a technical writer who enjoys making hard concepts easier for other developers to understand and his work has been published on multiple sites.

LinkedIn GitHub

相關文章 - PostgreSQL Variable