第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何在psql中使用腳本變量?

如何在psql中使用腳本變量?

HUWWW 2019-10-08 14:40:31
在MS SQL Server中,我創(chuàng)建了腳本以使用可自定義的變量:DECLARE @somevariable int  SELECT @somevariable = -1INSERT INTO foo VALUES ( @somevariable )然后,我將@somevariable在運行時更改值,具體取決于在特定情況下所需的值。由于它位于腳本的頂部,因此很容易看到和記住。如何使用PostgreSQL客戶端執(zhí)行相同的操作psql?
查看完整描述

3 回答

?
蝴蝶刀刀

TA貢獻1801條經(jīng)驗 獲得超8個贊

Postgres變量是通過\ set命令創(chuàng)建的,例如...


\set myvariable value

...,然后可以替換為...


SELECT * FROM :myvariable.table1;

... 要么 ...


SELECT * FROM table1 WHERE :myvariable IS NULL;

編輯:從psql 9.1開始,變量可以用引號引起來,如下所示:


\set myvariable value 


SELECT * FROM table1 WHERE column1 = :'myvariable';

在舊版本的psql客戶端中:


...如果要將變量用作條件字符串查詢中的值,例如...


SELECT * FROM table1 WHERE column1 = ':myvariable';

...那么您需要在變量本身中包含引號,因為上述內(nèi)容將無法正常工作。而是這樣定義您的變量...


\set myvariable 'value'

但是,如果像我一樣,您遇到了要從現(xiàn)有變量中創(chuàng)建字符串的情況,我發(fā)現(xiàn)竅門就是...


\set quoted_myvariable '\'' :myvariable '\''

現(xiàn)在,您同時具有相同字符串的帶引號和不帶引號的變量!而且你可以做這樣的事情....


INSERT INTO :myvariable.table1 SELECT * FROM table2 WHERE column1 = :quoted_myvariable;


查看完整回答
反對 回復(fù) 2019-10-08
?
暮色呼如

TA貢獻1853條經(jīng)驗 獲得超9個贊

關(guān)于PSQL變量的最后一句話:


如果將它們用SQL語句括在單引號中,它們將不會擴展。因此,這不起作用:


SELECT * FROM foo WHERE bar = ':myvariable'

要在SQL語句中擴展為字符串文字,必須在變量集中包括引號。但是,變量值已經(jīng)必須用引號引起來,這意味著您需要第二組引號,并且必須對內(nèi)部引號進行轉(zhuǎn)義。因此,您需要:


\set myvariable '\'somestring\''  

SELECT * FROM foo WHERE bar = :myvariable

編輯:從PostgreSQL 9.1開始,您可以改寫:


\set myvariable somestring

SELECT * FROM foo WHERE bar = :'myvariable'


查看完整回答
反對 回復(fù) 2019-10-08
?
慕運維8079593

TA貢獻1876條經(jīng)驗 獲得超5個贊

專門針對psql,您也可以psql從命令行傳遞變量。你可以通過他們-v。這是一個用法示例:


$ psql -v filepath=/path/to/my/directory/mydatafile.data regress

regress=> SELECT :'filepath';

               ?column?                

---------------------------------------

 /path/to/my/directory/mydatafile.data

(1 row)

注意,冒號未加引號,然后變量名稱“ self”被加引號。我知道語法很奇怪。這僅在psql中有效;(例如)PgAdmin-III無法使用。


這種替換發(fā)生在psql的輸入處理期間,因此您不能(說)定義一個函數(shù),該函數(shù)使用:'filepath'并期望在:'filepath'會話之間更改的值。定義函數(shù)后,它將被替換一次,之后將是一個常量。這對于腳本編寫很有用,但對運行時不起作用。


查看完整回答
反對 回復(fù) 2019-10-08
  • 3 回答
  • 0 關(guān)注
  • 1308 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號