佳木斯湛栽影视文化发展公司

主頁 > 知識(shí)庫 > PostgreSQL數(shù)據(jù)庫中匿名塊的寫法實(shí)例

PostgreSQL數(shù)據(jù)庫中匿名塊的寫法實(shí)例

熱門標(biāo)簽:AI電銷 網(wǎng)站排名優(yōu)化 服務(wù)外包 呼叫中心市場(chǎng)需求 百度競(jìng)價(jià)排名 鐵路電話系統(tǒng) Linux服務(wù)器 地方門戶網(wǎng)站

看代碼吧~

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=# 

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

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

本文我們學(xué)習(xí)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)塊進(jìn)行組織。完整結(jié)構(gòu)塊的語法如下:

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

詳細(xì)說明如下:

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

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

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

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

下面示例描述一個(gè)簡(jiǎn)單塊結(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 $$;

運(yùn)行結(jié)果:

NOTICE: The current value of counter is 1 

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

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

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

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

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

** 什么是雙 ($$) 符號(hào)?**

($$) 符號(hào) 是單引號(hào)(')的替代符號(hào)。開發(fā)PL/pgSQL 時(shí),無論是函數(shù)或過程,必須把主體部分放在一個(gè)字符串中。因此必須對(duì)主體部分的單引號(hào)進(jìn)行轉(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';

使用($$) 符號(hào)可以避免引號(hào)問題。也可以在$之間使用標(biāo)識(shí),如之間使用標(biāo)識(shí),如之間使用標(biāo)識(shí),如function$ , procedureprocedureprocedure.

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

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

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

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。

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

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

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

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

總結(jié)

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

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

您可能感興趣的文章:
  • postgreSQL數(shù)據(jù)庫默認(rèn)用戶postgres常用命令分享
  • postgresql修改完端口后直接psql連接數(shù)據(jù)庫報(bào)錯(cuò)的解決
  • postgresql數(shù)據(jù)庫安裝部署搭建主從節(jié)點(diǎn)的詳細(xì)過程(業(yè)務(wù)庫)
  • 如何獲取PostgreSQL數(shù)據(jù)庫中的JSON值
  • postgreSQL數(shù)據(jù)庫的監(jiān)控及數(shù)據(jù)維護(hù)操作
  • SpringBoot連接使用PostgreSql數(shù)據(jù)庫的方法
  • PostgreSql 導(dǎo)入導(dǎo)出sql文件格式的表數(shù)據(jù)實(shí)例
  • PostgreSQL upsert(插入更新)數(shù)據(jù)的操作詳解
  • 使用postgresql 模擬批量數(shù)據(jù)插入的案例

標(biāo)簽:仙桃 湖南 湘潭 蘭州 崇左 衡水 銅川 黃山

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《PostgreSQL數(shù)據(jù)庫中匿名塊的寫法實(shí)例》,本文關(guān)鍵詞  ;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 收縮
    • 微信客服
    • 微信二維碼
    • 電話咨詢

    • 400-1100-266
    庄河市| 商河县| 崇明县| 开远市| 琼结县| 漳浦县| 广汉市| 合川市| 射洪县| 土默特左旗| 丰城市| 全南县| 朝阳市| 白水县| 灵武市| 彰化市| 呈贡县| 无为县| 桃源县| 宁阳县| 古丈县| 莫力| 安西县| 陵川县| 阜新市| 广灵县| 枞阳县| 灯塔市| 东方市| 右玉县| 镇巴县| 巴里| 台安县| 靖边县| 梅河口市| 蒙山县| 神池县| 灵寿县| 达州市| 洞口县| 修文县|