亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

PgSQL條件語句與循環(huán)語句示例代碼詳解

 更新時(shí)間:2022年07月09日 14:12:41   作者:趙廣陸  
這篇文章主要介紹了PgSQL條件語句與循環(huán)語句,pgSQL中有兩種條件語句分別為if與case語句,每種語句通過示例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下

1 條件語句

pgSQL中有兩種條件語句分別為if與case語句。

if
if 語句形式包含以下幾種:
IF … THEN … END IF
IF … THEN … ELSE … END IF
IF … THEN … ELSIF … THEN … ELSE … END IF

示例
示例函數(shù) test_if,將下方示例語句復(fù)制到對應(yīng)位置即可進(jìn)行測試。

create or replace function test_if(i int) returns void as $$
DECLARE
BEGIN
-- 替換對應(yīng)if語句
END;
$$ LANGUAGE plpgsql;
IF … THEN … END IF
該示例當(dāng)輸入值i大于10時(shí)會(huì)打印 i的值為:%
if i > 10 then
raise notice 'i的值為:%', i;
end if;
IF … THEN … ELSE … END IF

該示例當(dāng)輸入值i大于10時(shí)會(huì)打印 i的值大于10 否則會(huì)打印 i的值小于等于10

if i > 10 then
raise notice 'i的值大于10';
else
raise notice 'i的值小于等于10';
end if;
IF … THEN … ELSIF … THEN … ELSE … END IF

該示例當(dāng)輸入值i大于10時(shí)會(huì)打印 i的值大于10 ,當(dāng)輸入值為5時(shí)會(huì)打印 ‘i的值為5’ ,否則會(huì)打印 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;

小提示
關(guān)鍵詞ELSIF也可以寫成ELSEIF。

1.1 elsif可以寫多個(gè)

case
CASE ... WHEN ... THEN ... ELSE ... END CASE
CASE WHEN ... THEN ... ELSE ... END CASE

示例
示例函數(shù) test_case,將下方示例語句復(fù)制到對應(yīng)位置即可進(jìn)行測試。

create or replace function test_case(i int) returns void as $$
DECLARE
BEGIN
-- 替換對應(yīng)case語句
END;
$$ LANGUAGE plpgsql;
CASE … WHEN … THEN … ELSE … END CASE
該示例當(dāng)輸入值i為1時(shí)會(huì)打印 i的值為1 ,當(dāng)輸入值為2時(shí)會(huì)打印 'i的值為2' ,否則會(huì)打印 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 語句會(huì)被執(zhí)行
如果ELSE不存在,將會(huì)拋出一個(gè)CASE_NOT_FOUND異常
CASE WHEN … THEN … ELSE … END CASE
case when是基于布爾表達(dá)式真假來執(zhí)行
該示例當(dāng)輸入值i為0-10之間時(shí)會(huì)打印 i的值在0-10之間 ,當(dāng)輸入值為11-20之間時(shí)會(huì)打印 i的值在11-20之間’ ,否則會(huì)打印 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 語句會(huì)被執(zhí)行
如果ELSE不存在,將會(huì)拋出一個(gè)CASE_NOT_FOUND異常循環(huán)語句

1.2 LOOP 循環(huán)

[ <> ] LOOP
statements
END LOOP [ label ];

LOOP定義一個(gè)無條件的循環(huán),它會(huì)無限重復(fù)直到被EXIT或RETURN語句終止??蛇x的label可以被EXIT和CONTINUE語句用
在嵌套循環(huán)中指定這些語句引用的是哪一層循環(huán)。
示例
示例函數(shù) test_loop,將下方示例語句復(fù)制到對應(yīng)位置即可進(jìn)行測試。

create or replace function test_loop(i int) returns int as $$
DECLARE
BEGIN
-- 替換對應(yīng)loop語句
END;
$$ LANGUAGE plpgsql;
exit 退出

該示例首先對i的值加1,如果i的值大于10則退出循環(huán),執(zhí)行 return 語句返回結(jié)果。輸入i的值為0時(shí),返回結(jié)果11,輸入i的值為
20時(shí),返回結(jié)果21。

LOOP
-- 一些計(jì)算
i = i + 1;
IF i > 10 THEN
EXIT; -- 退出循環(huán)
END IF;
END LOOP;
return i;
exit when 退出
該示例與上方示例效果一樣。
LOOP
-- 一些計(jì)算
i = i + 1;
EXIT WHEN i > 10; -- 和前一個(gè)例子相同的結(jié)果
END LOOP;
return i;
exit [lable]

該示例執(zhí)行 select test_loop(0) 時(shí)輸出結(jié)果為11,而不是100。當(dāng) exit 指定退出標(biāo)簽時(shí),會(huì)退出整個(gè)塊語句繼續(xù)執(zhí)行,以下示例退
出 twoblock ,執(zhí)行 return 語句,所以該值為11;

create or replace function test_loop(i int) returns int as $$
<>
DECLARE
BEGIN
<>
DECLARE
BEGIN
<>
DECLARE
begin
LOOP
-- 一些計(jì)算
i = i + 1;
IF i > 10 THEN
EXIT twoblock; -- 退出循環(huán)
END IF;
END LOOP;
END;
i = 100;
END;
return i;
END;
$$ LANGUAGE plpgsql;
continue
CONTINUE [ label ] [ WHEN boolean-expression ];

該示例會(huì)打印輸出i的值,其中當(dāng)i的值為5時(shí),不會(huì)打印。

LOOP
i = i + 1;
EXIT WHEN i > 10;
CONTINUE WHEN i = 5;
raise notice 'i的值為:%',i;
END LOOP;

在這里插入圖片描述

小提示
CONTINUE可以被用在所有類型的循環(huán)中,它并不限于在LOOP中使用。

2 WHILE 循環(huán)

[ <> ] WHILE boolean-expression LOOP
statements
END LOOP [ label ];
示例
示例函數(shù) test_,將下方示例語句復(fù)制到對應(yīng)位置即可進(jìn)行測試,下方所有循環(huán)都可以使用此函數(shù)測試。
create or replace function test_(i int) returns int as $$
DECLARE
BEGIN
-- 替換對應(yīng)循環(huán)語句
END;
$$ LANGUAGE plpgsql;
該示例輸入值為0,判斷i的值是否小于10,小于10則執(zhí)行+1,否則 return 。
WHILE i < 10 LOOP
i = i + 1;
END LOOP;
return i;

3 FOR 循環(huán)

這種形式的FOR會(huì)創(chuàng)建一個(gè)在一個(gè)整數(shù)范圍上迭代的循環(huán)。變量name會(huì)自動(dòng)定義為類型integer并且只在循環(huán)內(nèi)存在(任何該
變量名的現(xiàn)有定義在此循環(huán)內(nèi)都將被忽略)。給出范圍上下界的兩個(gè)表達(dá)式在進(jìn)入循環(huán)的時(shí)候計(jì)算一次。如果沒有指定BY子
句,迭代步長為 1,否則步長是BY中指定的值,該值也只在循環(huán)進(jìn)入時(shí)計(jì)算一次。如果指定了REVERSE,那么在每次迭代后
步長值會(huì)被減除而不是增加。

[ <> ] FOR name IN [ REVERSE ] expression .. expression [ BY expression ] LOOP
statements
END LOOP [ label ];

示例

FOR i IN 1..10 LOOP
-- 我在循環(huán)中將取值 1,2,3,4,5,6,7,8,9,10
END LOOP;
FOR i IN REVERSE 10..1 LOOP
-- 我在循環(huán)中將取值 10,9,8,7,6,5,4,3,2,1
END LOOP;
FOR i IN REVERSE 10..1 BY 2 LOOP
-- 我在循環(huán)中將取值 10,8,6,4,2
END LOOP;
查詢結(jié)果循環(huán)(FOR…IN… )
FOR…IN

通過一個(gè)查詢的結(jié)果進(jìn)行迭代并且操縱相應(yīng)的數(shù)據(jù)。語法是:

[ <> ] FOR target IN query LOOP
statements
END LOOP [ label ];

target是一個(gè)記錄變量、行變量或者逗號分隔的標(biāo)量變量列表。target被連續(xù)不斷被賦予來自query的每一行,并且循環(huán)體將為
每一行執(zhí)行一次。下面是一個(gè)例子:

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語句是在行上迭代的另一種方式,示例如下:
該示例將代碼作為參數(shù)傳入,使用using動(dòng)態(tài)替換。

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;
數(shù)組循環(huán)(FOREACH )
FOREACH語法結(jié)構(gòu)如下:
[ <> ] FOREACH target [ SLICE number ] IN ARRAY expression LOOP
statements
END LOOP [ label ];

示例
不使用slice
該示例使用 select test_sum(array[1,2,3]) 語句測試會(huì)返回和為 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示例
通過一個(gè)正SLICE值,F(xiàn)OREACH通過數(shù)組的切片而不是單一元素迭代。SLICE值必須是一個(gè)不大于數(shù)組維度數(shù)的整數(shù)常
量。 target 變量必須是一個(gè)數(shù)組,并且它接收數(shù)組值的連續(xù)切片,其中每一個(gè)切片都有SLICE指定的維度數(shù)。這里是一個(gè)通過一
維切片迭代的例子:

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;

在這里插入圖片描述

到此這篇關(guān)于PgSQL條件語句與循環(huán)語句的文章就介紹到這了,更多相關(guān)PgSQL條件語句與循環(huán)語句內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • PostgreSQL HOT與PHOT有哪些區(qū)別

    PostgreSQL HOT與PHOT有哪些區(qū)別

    這篇文章主要介紹了PostgreSQL8.3版本開始就引入的HOT機(jī)制與PHOT使用區(qū)別,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-09-09
  • PostgreSQL 修改表字段常用命令操作

    PostgreSQL 修改表字段常用命令操作

    這篇文章主要介紹了PostgreSQL 修改表字段常用命令操作,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-12-12
  • postgresql中如何執(zhí)行sql文件

    postgresql中如何執(zhí)行sql文件

    這篇文章主要介紹了postgresql中如何執(zhí)行sql文件問題,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-05-05
  • postgresql 切換 log、xlog日志的實(shí)現(xiàn)

    postgresql 切換 log、xlog日志的實(shí)現(xiàn)

    這篇文章主要介紹了postgresql 切換 log、xlog日志的實(shí)現(xiàn)方式,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-01-01
  • Windows PostgreSQL 安裝圖文教程

    Windows PostgreSQL 安裝圖文教程

    PostgreSQL是一套功能強(qiáng)大的對象-關(guān)系型數(shù)據(jù)庫管理系統(tǒng)。經(jīng)過十幾年的發(fā)展, PostgreSQL 是世界上可以獲得的最先進(jìn)的開放源碼的數(shù)據(jù)庫系統(tǒng)
    2009-08-08
  • PostgreSQL查詢和處理JSON數(shù)據(jù)

    PostgreSQL查詢和處理JSON數(shù)據(jù)

    這篇文章主要給大家介紹了關(guān)于PostgreSQL查詢和處理JSON數(shù)據(jù)的相關(guān)資料,需要的朋友可以參考下
    2023-11-11
  • PostgreSQL 定義返回表函數(shù)的操作

    PostgreSQL 定義返回表函數(shù)的操作

    這篇文章主要介紹了PostgreSQL 定義返回表函數(shù)的操作,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-01-01
  • 關(guān)于postgresql?timestamp時(shí)間戳問題

    關(guān)于postgresql?timestamp時(shí)間戳問題

    這篇文章主要介紹了關(guān)于postgresql?timestamp時(shí)間戳問題,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-03-03
  • 如何使用PostgreSQL進(jìn)行中文全文檢索

    如何使用PostgreSQL進(jìn)行中文全文檢索

    PostgreSQL被稱為是“最高級的開源數(shù)據(jù)庫”,它的數(shù)據(jù)類型非常豐富,用它來解決一些比較偏門的需求非常適合。由于PgSQL國內(nèi)的資料較少,所有本文將詳細(xì)介紹此類問題,以便后來的同學(xué)能順利使用PgSQL。
    2021-05-05
  • Postgresql psql文件執(zhí)行與批處理多個(gè)sql文件操作

    Postgresql psql文件執(zhí)行與批處理多個(gè)sql文件操作

    這篇文章主要介紹了Postgresql psql文件執(zhí)行與批處理多個(gè)sql文件操作,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-01-01

最新評論