<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
pgSQL中有兩種條件語句分別為if與case語句。
if if 語句形式包含以下幾種: IF … THEN … END IF IF … THEN … ELSE … END IF IF … THEN … ELSIF … THEN … ELSE … END IF
範例
範例函數 test_if,將下方範例語句複製到對應位置即可進行測試。
create or replace function test_if(i int) returns void as $$ DECLARE BEGIN -- 替換對應if語句 END; $$ LANGUAGE plpgsql; IF … THEN … END IF 該範例當輸入值i大於10時會列印 i的值為:% if i > 10 then raise notice 'i的值為:%', i; end if; IF … THEN … ELSE … END IF
該範例當輸入值i大於10時會列印 i的值大於10 否則會列印 i的值小於等於10
if i > 10 then raise notice 'i的值大於10'; else raise notice 'i的值小於等於10'; end if; IF … THEN … ELSIF … THEN … ELSE … END IF
該範例當輸入值i大於10時會列印 i的值大於10 ,當輸入值為5時會列印 ‘i的值為5’ ,否則會列印 i的值小於等於10
if i > 10 then raise notice 'i的值大於10'; elsif i = 5 then raise notice 'i的值為5'; else raise notice 'i的值小於等於10'; end if;
小提示
關鍵詞ELSIF也可以寫成ELSEIF。
case CASE ... WHEN ... THEN ... ELSE ... END CASE CASE WHEN ... THEN ... ELSE ... END CASE
範例
範例函數 test_case,將下方範例語句複製到對應位置即可進行測試。
create or replace function test_case(i int) returns void as $$ DECLARE BEGIN -- 替換對應case語句 END; $$ LANGUAGE plpgsql; CASE … WHEN … THEN … ELSE … END CASE 該範例當輸入值i為1時會列印 i的值為1 ,當輸入值為2時會列印 'i的值為2' ,否則會列印 i的值既不為1也不為2 case i when 1,3 then raise notice 'i的值為1'; when 2 then raise notice 'i的值為2'; else raise notice 'i的值既不為1也不為2'; end case;
小提示
如果沒有找到匹配,ELSE 語句會被執行
如果ELSE不存在,將會丟擲一個CASE_NOT_FOUND異常CASE WHEN … THEN … ELSE … END CASE
case when是基於布林表示式真假來執行
該範例當輸入值i為0-10之間時會列印 i的值在0-10之間 ,當輸入值為11-20之間時會列印 i的值在11-20之間’ ,否則會列印 i的值不在0-20之間
CASE WHEN i BETWEEN 0 AND 10 THEN raise notice 'i的值在0-10之間'; WHEN i BETWEEN 11 AND 20 THEN raise notice 'i的值在11-20之間'; else raise notice 'i的值不在0-20之間'; END CASE;
小提示
如果沒有找到匹配,ELSE 語句會被執行
如果ELSE不存在,將會丟擲一個CASE_NOT_FOUND異常回圈語句
[ <> ] LOOP statements END LOOP [ label ];
LOOP定義一個無條件的迴圈,它會無限重複直到被EXIT或RETURN語句終止。可選的label可以被EXIT和CONTINUE語句用
在巢狀迴圈中指定這些語句參照的是哪一層迴圈。
範例
範例函數 test_loop,將下方範例語句複製到對應位置即可進行測試。
create or replace function test_loop(i int) returns int as $$ DECLARE BEGIN -- 替換對應loop語句 END; $$ LANGUAGE plpgsql; exit 退出
該範例首先對i的值加1,如果i的值大於10則退出迴圈,執行 return 語句返回結果。輸入i的值為0時,返回結果11,輸入i的值為
20時,返回結果21。
LOOP -- 一些計算 i = i + 1; IF i > 10 THEN EXIT; -- 退出迴圈 END IF; END LOOP; return i; exit when 退出 該範例與上方範例效果一樣。 LOOP -- 一些計算 i = i + 1; EXIT WHEN i > 10; -- 和前一個例子相同的結果 END LOOP; return i; exit [lable]
該範例執行 select test_loop(0) 時輸出結果為11,而不是100。當 exit 指定退出標籤時,會退出整個塊語句繼續執行,以下範例退
出 twoblock ,執行 return 語句,所以該值為11;
create or replace function test_loop(i int) returns int as $$ <> DECLARE BEGIN <> DECLARE BEGIN <> DECLARE begin LOOP -- 一些計算 i = i + 1; IF i > 10 THEN EXIT twoblock; -- 退出迴圈 END IF; END LOOP; END; i = 100; END; return i; END; $$ LANGUAGE plpgsql; continue CONTINUE [ label ] [ WHEN boolean-expression ];
該範例會列印輸出i的值,其中當i的值為5時,不會列印。
LOOP i = i + 1; EXIT WHEN i > 10; CONTINUE WHEN i = 5; raise notice 'i的值為:%',i; END LOOP;
小提示
CONTINUE可以被用在所有型別的迴圈中,它並不限於在LOOP中使用。
[ <> ] WHILE boolean-expression LOOP statements END LOOP [ label ]; 範例 範例函數 test_,將下方範例語句複製到對應位置即可進行測試,下方所有迴圈都可以使用此函數測試。 create or replace function test_(i int) returns int as $$ DECLARE BEGIN -- 替換對應迴圈語句 END; $$ LANGUAGE plpgsql; 該範例輸入值為0,判斷i的值是否小於10,小於10則執行+1,否則 return 。 WHILE i < 10 LOOP i = i + 1; END LOOP; return i;
這種形式的FOR會建立一個在一個整數範圍上迭代的迴圈。變數name會自動定義為型別integer並且只在迴圈記憶體在(任何該
變數名的現有定義在此迴圈內都將被忽略)。給出範圍上下界的兩個表示式在進入迴圈的時候計算一次。如果沒有指定BY子
句,迭代步長為 1,否則步長是BY中指定的值,該值也只在迴圈進入時計算一次。如果指定了REVERSE,那麼在每次迭代後
步長值會被減除而不是增加。
[ <> ] FOR name IN [ REVERSE ] expression .. expression [ BY expression ] LOOP statements END LOOP [ label ];
範例
FOR i IN 1..10 LOOP -- 我在迴圈中將取值 1,2,3,4,5,6,7,8,9,10 END LOOP; FOR i IN REVERSE 10..1 LOOP -- 我在迴圈中將取值 10,9,8,7,6,5,4,3,2,1 END LOOP; FOR i IN REVERSE 10..1 BY 2 LOOP -- 我在迴圈中將取值 10,8,6,4,2 END LOOP; 查詢結果迴圈(FOR…IN… ) FOR…IN
通過一個查詢的結果進行迭代並且操縱相應的資料。語法是:
[ <> ] FOR target IN query LOOP statements END LOOP [ label ];
target是一個記錄變數、行變數或者逗號分隔的標量變數列表。target被連續不斷被賦予來自query的每一行,並且迴圈體將為
每一行執行一次。下面是一個例子:
create or replace function test_for_in() returns int as $$ DECLARE cddm record; BEGIN RAISE NOTICE 'reading jcb_cddm...'; FOR cddm IN SELECT * FROM jcb_cddm limit 5 LOOP RAISE NOTICE '場地程式碼為:%,場地名稱為 %', cddm.dm, quote_ident(cddm.mc); END LOOP; return 1; END; $$ LANGUAGE plpgsql;
FOR…IN…EXECUTE
FOR-IN-EXECUTE語句是在行上迭代的另一種方式,範例如下:
該範例將程式碼作為引數傳入,使用using動態替換。
create or replace function test_for_in(dm varchar) returns int as $$ DECLARE cddm record; BEGIN RAISE NOTICE 'reading jcb_cddm...'; FOR cddm IN execute 'SELECT * FROM jcb_cddm where dm = $1 limit 5' using dm LOOP RAISE NOTICE '場地程式碼為:%,場地名稱為 %', cddm.dm, quote_ident(cddm.mc); END LOOP; return 1; END; $$ LANGUAGE plpgsql; 陣列迴圈(FOREACH ) FOREACH語法結構如下: [ <> ] FOREACH target [ SLICE number ] IN ARRAY expression LOOP statements END LOOP [ label ];
範例
不使用slice
該範例使用 select test_sum(array[1,2,3]) 語句測試會返回和為 6
CREATE FUNCTION test_sum(int[]) RETURNS int8 AS $$ DECLARE s int8 := 0; x int; BEGIN FOREACH x IN ARRAY $1 LOOP s := s + x; END LOOP; RETURN s; END; $$ LANGUAGE plpgsql;
slice範例
通過一個正SLICE值,FOREACH通過陣列的切片而不是單一元素迭代。SLICE值必須是一個不大於陣列維度數的整數常
量。 target 變數必須是一個陣列,並且它接收陣列值的連續切片,其中每一個切片都有SLICE指定的維度數。這裡是一個通過一
維切片迭代的例子:
CREATE FUNCTION scan_rows(int[]) RETURNS void AS $$ DECLARE x int[]; BEGIN FOREACH x SLICE 1 IN ARRAY $1 LOOP RAISE NOTICE 'row = %', x; END LOOP; END; $$ LANGUAGE plpgsql;
到此這篇關於PgSQL條件語句與迴圈語句的文章就介紹到這了,更多相關PgSQL條件語句與迴圈語句內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45