濮阳杆衣贸易有限公司

主頁 > 知識庫 > Postgresql的pl/pgql使用操作--將多條執(zhí)行語句作為一個事務(wù)

Postgresql的pl/pgql使用操作--將多條執(zhí)行語句作為一個事務(wù)

熱門標簽:海豐有多少商家沒有地圖標注 打電話智能電銷機器人授權(quán) 美容工作室地圖標注 辦公外呼電話系統(tǒng) 合肥公司外呼系統(tǒng)運營商 外呼調(diào)研系統(tǒng) 重慶自動外呼系統(tǒng)定制 地圖標注和圖片名稱的區(qū)別 漯河外呼電話系統(tǒng)

Postgresql的pl/pgql用法--將多條執(zhí)行語句作為一個事務(wù)

DO $$ 
DECLARE 
 v_id bigint; 
begin 
 --1.
 INSERT INTO r_test_a (name, value, unit, mode, uid, create_ts) 
 SELECT 't_t','','',2,0, extract(epoch from now())::bigint 
 WHERE NOT EXISTS (SELECT id FROM r_test_a WHERE name = 't_t' AND value = '' AND unit = '' AND uid =0);
 --2.
 SELECT id into v_id from r_test_a WHERE name = 't_t' AND value = '' AND unit = '' AND uid = 0;
 --3.
 DELETE FROM r_test_b a WHERE a.obj_id = 'xxx' AND a.file_id = 'ooo' AND a.id IN (SELECT id FROM r_test_a b WHERE b.name = 't_t' AND b.uid=0); 
 --4.
 INSERT INTO r_test_b (id, obj_id, file_id, create_ts) SELECT v_id,'xxx','ooo', extract(epoch from now())::bigint ;
end 
$$;

補充:PostgreSql 的PL/pgSQL 塊結(jié)構(gòu) (在pgAdmin查詢工具中如何執(zhí)行語句塊)

本文我們學習PL/pgSQL結(jié)構(gòu)塊,包括如何寫結(jié)構(gòu)塊和執(zhí)行結(jié)構(gòu)塊。

什么是結(jié)構(gòu)塊

PL/pgSQL是結(jié)構(gòu)塊語言,因此,PL/pgSQL函數(shù)或過程是通過結(jié)構(gòu)塊進行組織。完整結(jié)構(gòu)塊的語法如下:

[ label>> ]
[ DECLARE
 declarations ]
BEGIN
 statements;
 ...
END [ label ];

詳細說明如下:

塊有兩部分組成:聲明部分和主體部分。聲明部分是可選的,而主體部分是必須的。塊在end關(guān)鍵字后面使用分號(;)表示結(jié)束。

塊可以有個可選的標簽在開始和結(jié)尾處。如果你想在塊主體中使用exit語句或限定塊中聲明的變量名稱時,需要使用塊標簽。

主體部分是編寫代碼的地方,每條語句需要使用分號結(jié)束。

PL/pgSQL 塊結(jié)構(gòu)示例

下面示例描述一個簡單塊結(jié)構(gòu),一般稱為匿名塊:

DO $$
first_block>>
DECLARE
 counter integer := 0;
BEGIN
 counter := counter + 1;
 RAISE NOTICE 'The current value of counter is %', counter;
END first_block $$;

運行結(jié)果:

NOTICE: The current value of counter is 1 

從pgAdmin中執(zhí)行塊,點擊圖示按鈕:

注意DO語句不屬于塊結(jié)構(gòu)。它用于執(zhí)行匿名塊。PostgreSQL 在9.0版本中引入DO語句。

在聲明部分定義變量counter并設(shè)置為0.

在主體部分,是counter值加1,通過RAISE NOTICE語句輸出其值。

first_block 標簽僅為了演示需要,本例中沒有啥意義。

** 什么是雙 ($$) 符號?**

($$) 符號 是單引號(')的替代符號。開發(fā)PL/pgSQL 時,無論是函數(shù)或過程,必須把主體部分放在一個字符串中。因此必須對主體部分的單引號進行轉(zhuǎn)義表示:

DO
'first_block>>
DECLARE
 counter integer := 0;
BEGIN 
 
 counter := counter + 1;
 RAISE NOTICE ''The current value of counter is %'', counter;
 
END first_block';

使用($$) 符號可以避免引號問題。也可以在$之間使用標識,如之間使用標識,如之間使用標識,如function$ , procedureprocedureprocedure.

PL/pgSQL 子結(jié)構(gòu)塊

PL/pgSQL可以一個塊在另一個塊的主體中。一個塊嵌入在另一個塊中稱為子塊,包含子塊的塊稱為外部塊。

子塊用于組織語句,這樣大塊能被分為更小和更多邏輯子塊。子塊的變量的名稱可以與外部塊變量名稱同名,雖然這在實踐中不建議。當在子塊中聲明一個與外部變量同名的變量,外部變量在子塊中被隱藏。如果需要訪問外部塊的變量,可以使用塊標簽作為變量的限定符,如下面示例:

DO $$ 
outer_block>>
DECLARE
 counter integer := 0;
BEGIN 
 counter := counter + 1;
 RAISE NOTICE 'The current value of counter is %', counter;
 
 DECLARE 
  counter integer := 0;
 BEGIN 
  counter := counter + 10;
  RAISE NOTICE 'The current value of counter in the subblock is %', counter;
  RAISE NOTICE 'The current value of counter in the outer block is %', outer_block.counter;
 END;
 
 RAISE NOTICE 'The current value of counter in the outer block is %', counter;

執(zhí)行結(jié)果如下:

NOTICE: The current value of counter is 1
NOTICE: The current value of counter in the subblock is 10
NOTICE: The current value of counter in the outer block is 1
NOTICE: The current value of counter in the outer block is 1

首先,在外部塊中聲明變量counter。

接著在子塊中也聲明了一個同名變量。

在進入子塊之前,變量的值為1。在子塊中,我們給變量counter值加10,然后打印出來。注意,這個改變僅影響子塊中counter變量。

然后,我們通過標簽限定符引用外部變量:outer_block.counter

最后,我們打印外部塊變量,其值保持不變。

總結(jié)

本文我們學習PL/pgSQL塊結(jié)構(gòu),通過DO語句可以執(zhí)行匿名塊。

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。如有錯誤或未考慮完全的地方,望不吝賜教。

您可能感興趣的文章:
  • PostgreSQL查看正在執(zhí)行的任務(wù)并強制結(jié)束的操作方法
  • 解決PostgreSQL 執(zhí)行超時的情況
  • PostgreSQL 實現(xiàn)定時job執(zhí)行(pgAgent)
  • 在postgresql中通過命令行執(zhí)行sql文件
  • Postgresql psql文件執(zhí)行與批處理多個sql文件操作
  • 在postgresql中結(jié)束掉正在執(zhí)行的SQL語句操作
  • PostgreSQL 實現(xiàn)sql放入文件批量執(zhí)行

標簽:蚌埠 錦州 衡陽 烏海 來賓 晉城 珠海 株洲

巨人網(wǎng)絡(luò)通訊聲明:本文標題《Postgresql的pl/pgql使用操作--將多條執(zhí)行語句作為一個事務(wù)》,本文關(guān)鍵詞  Postgresql,的,pgql,使用,操作,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《Postgresql的pl/pgql使用操作--將多條執(zhí)行語句作為一個事務(wù)》相關(guān)的同類信息!
  • 本頁收集關(guān)于Postgresql的pl/pgql使用操作--將多條執(zhí)行語句作為一個事務(wù)的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    韶关市| 甘孜县| 乌海市| 上犹县| 阿拉善左旗| 安徽省| 景东| 开封县| 石景山区| 贵港市| 乡宁县| 黄梅县| 天镇县| 洞口县| 宽甸| 荃湾区| 乡宁县| 卓资县| 梅河口市| 云和县| 凤山县| 富民县| 桑日县| 报价| 麻江县| 鹤峰县| 青阳县| 哈尔滨市| 奈曼旗| 吉隆县| 福泉市| 玉山县| 元氏县| 始兴县| 收藏| 丰城市| 鄂温| 盐山县| 五大连池市| 林周县| 荔波县|