postgres 显示变量_sql - 如何在PostgreSQL查询中声明变量
sql - 如何在PostgreSQL查詢中聲明變量
如何聲明變量以用于PostgreSQL 8.3查詢?
在MS SQL Server中,我可以這樣做:
DECLARE @myvar INT
SET @myvar = 5
SELECT *
FROM somewhere
WHERE something = @myvar
我如何在PostgreSQL中做同樣的事情? 根據文檔變量被簡單地聲明為“名稱類型;”,但這給了我一個語法錯誤:
myvar INTEGER;
有人能給我一個正確語法的例子嗎?
8個解決方案
146 votes
我通過使用WITH條款完成了相同的目標,它沒有那么優雅,但可以做同樣的事情。 雖然這個例子真的有點過分。 我也不特別推薦這個。
WITH myconstants (var1, var2) as (
values (5, 'foo')
)
SELECT *
FROM somewhere, myconstants
WHERE something = var1
OR something_else = var2;
fei0x answered 2019-05-09T12:34:14Z
65 votes
PostgreSQL中沒有這樣的功能。 您只能在pl / PgSQL(或其他pl / *)中執行此操作,但不能在純SQL中執行此操作。
一個例外是WITH ()查詢,它可以作為變量,甚至tuple的變量。 它允許您返回臨時值表。
WITH master_user AS (
SELECT
login,
registration_date
FROM users
WHERE ...
)
SELECT *
FROM users
WHERE master_login = (SELECT login
FROM master_user)
AND (SELECT registration_date
FROM master_user) > ...;
J.Wincewicz answered 2019-05-09T12:33:48Z
53 votes
你也可以在PLPGSQL中試試這個:
DO $$
DECLARE myvar integer;
BEGIN
SELECT 5 INTO myvar;
DROP TABLE IF EXISTS tmp_table;
CREATE TABLE tmp_table AS
SELECT * FROM yourtable WHERE id = myvar;
END $$;
SELECT * FROM tmp_table;
以上要求Postgres 9.0或更高版本。
Dario Barrionuevo answered 2019-05-09T12:34:46Z
36 votes
這取決于您的客戶。
但是,如果您使用的是psql客戶端,則可以使用以下命令:
my_db=> \set myvar 5
my_db=> SELECT :myvar + 1 AS my_var_plus_1;
my_var_plus_1
---------------
6
Shahriar Aghajani answered 2019-05-09T12:35:18Z
34 votes
動態配置設置
你可以“濫用”動態配置設置:
-- choose some prefix that is unlikey to be used by postgres
set session my.vars.id = '1';
select *
from person
where id = current_setting('my.vars.id')::int;
配置設置始終是varchar值,因此在使用它們時需要將它們轉換為正確的數據類型。 這適用于任何SQL客戶端,而postgresql.conf僅適用于postgresql.conf
以上要求Postgres 9.2或更高版本。
對于以前的版本,變量必須在使用之前在postgresql.conf中聲明,因此它在一定程度上限制了它的可用性。 實際上不是變量完全,但配置“類”本質上是前綴。 但是一旦定義了前綴,就可以使用任何變量而無需更改postgresql.conf
a_horse_with_no_name answered 2019-05-09T12:36:12Z
18 votes
使用pl / PgSQL之外的臨時表
除了建議使用pl / pgsql或其他pl / *語言之外,這是我能想到的唯一其他可能性。
begin;
select 5::int as var into temp table myvar;
select *
from somewhere s, myvar v
where s.something = v.var;
commit;
Evan Carroll answered 2019-05-09T12:36:45Z
6 votes
我想提議對@ DarioBarrionuevo的答案進行改進,以便更簡單地利用臨時表。
DO $$
DECLARE myvar integer = 5;
BEGIN
CREATE TEMP TABLE tmp_table ON COMMIT DROP AS
-- put here your query with variables:
SELECT *
FROM yourtable
WHERE id = myvar;
END $$;
SELECT * FROM tmp_table;
bluish answered 2019-05-09T12:37:10Z
2 votes
以下是使用PREPARE語句的示例。 您仍然無法使用?,但您可以使用$n表示法:
PREPARE foo(integer) AS
SELECT *
FROM somewhere
WHERE something = $1;
EXECUTE foo(5);
DEALLOCATE foo;
Martin Zinovsky answered 2019-05-09T12:37:36Z
總結
以上是生活随笔為你收集整理的postgres 显示变量_sql - 如何在PostgreSQL查询中声明变量的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: qt 加载 图片旋转_QT 实现图片旋转
- 下一篇: 查看pg 用户组_PostgreSQL