PostgreSQL數(shù)據(jù)庫中匿名塊的寫法實例
看代碼吧~
test=# DO $$DECLARE i record; test$# BEGIN test$# FOR i IN 1..10 test$# LOOP test$# execute 'select loop_insert(1)'; test$# END LOOP; test$# END$$; DO test=#
看匿名塊的執(zhí)行效果:
test=# select count(*) from lineitem; count ------- 7000 (1 row) test=# select count(*) from lineitem; count ------- 17000 ------------->>>>匿名塊插入了10000條記錄. (1 row) test=#
補充:PostgreSql 的PL/pgSQL 塊結(jié)構(gòu) (在pgAdmin查詢工具中如何執(zhí)行語句塊)
PostgreSql 的PL/pgSQL 塊結(jié)構(gòu)
本文我們學習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數(shù)據(jù)庫默認用戶postgres常用命令分享
- postgresql修改完端口后直接psql連接數(shù)據(jù)庫報錯的解決
- postgresql數(shù)據(jù)庫安裝部署搭建主從節(jié)點的詳細過程(業(yè)務(wù)庫)
- 如何獲取PostgreSQL數(shù)據(jù)庫中的JSON值
- postgreSQL數(shù)據(jù)庫的監(jiān)控及數(shù)據(jù)維護操作
- SpringBoot連接使用PostgreSql數(shù)據(jù)庫的方法
- PostgreSql 導入導出sql文件格式的表數(shù)據(jù)實例
- PostgreSQL upsert(插入更新)數(shù)據(jù)的操作詳解
- 使用postgresql 模擬批量數(shù)據(jù)插入的案例
相關(guān)文章
PostgreSQL教程(四):數(shù)據(jù)類型詳解
這篇文章主要介紹了PostgreSQL教程(四):數(shù)據(jù)類型詳解,本文講解了數(shù)值類型、字符類型、布爾類型、位串類型、數(shù)組、復合類型等數(shù)據(jù)類型,需要的朋友可以參考下2015-05-05
postgresql 中的 like 查詢優(yōu)化方案
這篇文章主要介紹了postgresql 中的 like 查詢優(yōu)化方案,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2021-01-01
PostgreSQL 使用raise函數(shù)打印字符串
這篇文章主要介紹了PostgreSQL 使用raise函數(shù)打印字符串,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2021-01-01
postgresql 實現(xiàn)修改jsonb字段中的某一個值
這篇文章主要介紹了postgresql 實現(xiàn)修改jsonb字段中的某一個值操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2021-01-01

