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

PostgreSQL自定義函數(shù)并且調(diào)用方式

 更新時(shí)間:2023年06月19日 09:47:28   作者:初夏0811  
這篇文章主要介紹了PostgreSQL如何自定義函數(shù)并且調(diào)用,本文通過(guò)示例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下

一、背景

在PostgreSQL關(guān)系型數(shù)據(jù)庫(kù)中,我們經(jīng)常是調(diào)用系統(tǒng)默認(rèn)的函數(shù),例如lower() ,arry_to_string()等等,但有時(shí)候特殊的需求,默認(rèn)的函數(shù)無(wú)法實(shí)現(xiàn)轉(zhuǎn)換,那么就需要通過(guò)自定義函數(shù),并且調(diào)用我們自定義的函數(shù)實(shí)現(xiàn)數(shù)據(jù)的轉(zhuǎn)換。

二、函數(shù)語(yǔ)法

CREATE [OR REPLACE] FUNCTION function_name (arguments)
RETURNS return_datatype AS $variable_name$  
  DECLARE  
    declaration;  
    [...]  
  BEGIN  
    < function_body >  
    [...]  
    RETURN { variable_name | value }  
  END;  $variable_name$ LANGUAGE plpgsql;

說(shuō)明

function_name:指定函數(shù)的名稱。
[OR REPLACE]:是可選的,它允許您修改/替換現(xiàn)有函數(shù)。
arguments:函數(shù)參數(shù)[[argmode]argname argtype [default value],[[argmode]argname argtype],[…]];argmode參數(shù)的模式有IN、OUT或則INOUT,缺省值是IN。argname參數(shù)名字。argtype參數(shù)的數(shù)據(jù)類型。default默認(rèn)參數(shù)。
RETURNS:它指定要從函數(shù)返回的數(shù)據(jù)類型。它可以是基礎(chǔ),復(fù)合或域類型,或者也可以引用表列的類型,比如return int、varchar,返回結(jié)果集時(shí)就需要setof來(lái)表示,無(wú)返回值使用void。如果存在OUT或則INOUT參數(shù),則可以省略RETURNS子句。
return_datatype:表示返回值類型。
function_body:function_body包含可執(zhí)行部分。
LANGUAGE:它指定實(shí)現(xiàn)該函數(shù)的語(yǔ)言的名稱。

三、異常處理語(yǔ)法

在PostgreSQL中可以利用RAISE語(yǔ)句報(bào)告信息和拋出錯(cuò)誤,其聲明形式為:

RAISE LEVEL 'format' [,expression,[...]]

說(shuō)明:
LEVEL:包含的級(jí)別有DEBUG(向服務(wù)器日志寫信息)、LOG(向服務(wù)器日志寫信息,優(yōu)先級(jí)更高)、INFO、NOTICE和WARNING(把信息寫到服務(wù)器日志以及轉(zhuǎn)發(fā)到客戶端應(yīng)用,優(yōu)先級(jí)逐步升高)和EXCEPTION拋出一個(gè)錯(cuò)誤(通常退出當(dāng)前事務(wù))。某個(gè)優(yōu)先級(jí)別的信息是報(bào)告給客戶端還是寫到服務(wù)器日志,還是兩個(gè)均有,是由log_min_messages和client_min_messages這兩個(gè)系統(tǒng)初始化參數(shù)控制的。

四、自定義函數(shù)示例

1、format函數(shù)

用于根據(jù)格式字符串設(shè)置參數(shù)的FORMAT()函數(shù)格式:

FORMAT(format_string [, format_arg [, ...] ])

示例:

SELECT FORMAT('Hello, %s', 'world!!');

執(zhí)行結(jié)果:Hello, world!!

2、使用default參數(shù)

create or replace function ftest(in fname VARCHAR default '編程語(yǔ)言', cname VARCHAR DEFAULT 'java')
RETURNS VARCHAR as $$
begin
	 return format('%s_%s',fname,cname);
end; $$ LANGUAGE plpgsql;

調(diào)用方式:

select ftest('語(yǔ)言');  --語(yǔ)言_java
select ftest(cname=>'java'); --編程語(yǔ)言_java

3、根據(jù)輸入的數(shù)字,返回兩個(gè)數(shù)的商,若除數(shù)為0,則拋出自定義異常

CREATE 
	OR REPLACE FUNCTION testdivision ( js1 INT, js2 INT ) RETURNS INT AS $$ DECLARE
	v_re INT;
BEGIN
		raise notice'% 除以 %',
		js1,
		js2;
	IF
		js2 = 0 THEN
			raise EXCEPTION '不能除0';
		ELSE v_re := js1 / js2;
		RETURN v_re;
	END IF;
	EXCEPTION --捕獲異常
	WHEN OTHERS THEN
		RETURN 0;
END;
$$ LANGUAGE plpgsql;

調(diào)用方式:

select testdivision(8,4);--2
select testdivision(3,0);--0

4、多個(gè)OUT或者INOUT參數(shù)時(shí),返回是一個(gè)元組;可以通過(guò)將函數(shù)調(diào)用放在 FROM 子句中來(lái)返回元組的各個(gè)成員

create or replace FUNCTION test1(in js1 int,inout res1 int,out res2 int) as
$$
begin
   res1:=js1*2;
	 res2:=res1*3;
end;
$$
LANGUAGE plpgsql;

調(diào)用方式:

select test1(3,2); --test1
                   --(6,18)
select * from test1(3,2);--res1|res2
                         --   6|  18

五、動(dòng)態(tài)執(zhí)行語(yǔ)句

1、數(shù)據(jù)準(zhǔn)備

create table tmp(
 bsm VARCHAR(100),
 name VARCHAR(100),
 num int
);
insert into tmp(bsm,name,num) VALUES('a','蘋果',21);
insert into tmp(bsm,name,num) VALUES('b','香蕉',11);

2、示例:動(dòng)態(tài)查詢某張表的記錄數(shù)

create or replace function getsum(in talename VARCHAR)
RETURNS int as $$
DECLARE
   stmt VARCHAR;
	 count int;
begin
  stmt:=format('select count(1) from %s', talename);
  raise notice '%',stmt;
	EXECUTE stmt into count;
	return count;
	EXCEPTION --捕獲異常
	WHEN OTHERS THEN
		RETURN 0;
end; $$ LANGUAGE plpgsql;

調(diào)用方式:

select getsum('tmp');--2

3、動(dòng)態(tài)創(chuàng)建表

create or replace function copytable(tablename varchar,times int)
RETURNS INT as $$
DECLARE
   stmt VARCHAR='create table %s_%s (like tmp including all);';--
begin
   for i in 1..times loop
	     raise notice 'd當(dāng)前次數(shù)%',i;
			 raise notice '%',format(stmt,tablename,i,tablename);
			 EXECUTE format('drop table if EXISTS %s_%s;',tablename,i) ;
			 EXECUTE format(stmt,tablename,i,tablename) ;
	 end loop;
	 return 0;			
END; $$  LANGUAGE plpgsql;

調(diào)用方式:

select copytable('tmp',2);即復(fù)制tmp表2次

到此這篇關(guān)于PostgreSQL如何自定義函數(shù)并且調(diào)用的文章就介紹到這了,更多相關(guān)PostgreSQL自定義函數(shù)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • PostgreSQL的擴(kuò)展adminpack使用

    PostgreSQL的擴(kuò)展adminpack使用

    adminpack是PostgreSQL的管理擴(kuò)展,提供文件系統(tǒng)操作、日志管理及維護(hù)工具,僅限超級(jí)用戶使用,支持配置備份、日志分析等場(chǎng)景,感興趣的可以了解一下
    2025-06-06
  • PostgreSQL copy 命令教程詳解

    PostgreSQL copy 命令教程詳解

    這篇文章主要介紹了PostgreSQL copy 命令教程詳解,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-01-01
  • 使用PostgreSQL數(shù)據(jù)庫(kù)建立用戶畫像系統(tǒng)的方法

    使用PostgreSQL數(shù)據(jù)庫(kù)建立用戶畫像系統(tǒng)的方法

    這篇文章主要介紹了使用PostgreSQL數(shù)據(jù)庫(kù)建立用戶畫像系統(tǒng),下面使用一個(gè)具體的例子來(lái)說(shuō)明如何使用PostgreSQL的json數(shù)據(jù)類型來(lái)建立用戶標(biāo)簽數(shù)據(jù),需要的朋友可以參考下
    2022-10-10
  • pgsql 變量賦值方法及注意事項(xiàng)

    pgsql 變量賦值方法及注意事項(xiàng)

    這篇文章主要介紹了pgsql 變量賦值方法及注意事項(xiàng),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2021-01-01
  • 使用postgresql 模擬批量數(shù)據(jù)插入的案例

    使用postgresql 模擬批量數(shù)據(jù)插入的案例

    這篇文章主要介紹了使用postgresql 模擬批量數(shù)據(jù)插入的案例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2021-01-01
  • PostgreSQL 實(shí)現(xiàn)distinct關(guān)鍵字給單獨(dú)的幾列去重

    PostgreSQL 實(shí)現(xiàn)distinct關(guān)鍵字給單獨(dú)的幾列去重

    這篇文章主要介紹了PostgreSQL 實(shí)現(xiàn)distinct關(guān)鍵字給單獨(dú)的幾列去重,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2021-01-01
  • 在docker上部署postgreSQL主從的超詳細(xì)步驟

    在docker上部署postgreSQL主從的超詳細(xì)步驟

    使用Docker能夠更加高效地部署和管理應(yīng)用程序,提高開發(fā)和運(yùn)維的效率,下面這篇文章主要給大家介紹了關(guān)于在docker上部署postgreSQL主從的超詳細(xì)步驟,文中通過(guò)代碼及圖文介紹的非常詳細(xì),需要的朋友可以參考下
    2024-08-08
  • PostgreSQL邏輯復(fù)制解密原理解析

    PostgreSQL邏輯復(fù)制解密原理解析

    邏輯復(fù)制,是基于復(fù)制標(biāo)識(shí)復(fù)制數(shù)據(jù)及其變化的一種方法,區(qū)別于物理復(fù)制對(duì)頁(yè)面操作的描述,邏輯復(fù)制是對(duì)事務(wù)及數(shù)據(jù)元組的一種描述,這篇文章主要介紹了PostgreSQL邏輯復(fù)制解密原理解析,需要的朋友可以參考下
    2022-09-09
  • Postgresql之時(shí)間戳long,TimeStamp,Date,String互轉(zhuǎn)方式

    Postgresql之時(shí)間戳long,TimeStamp,Date,String互轉(zhuǎn)方式

    這篇文章主要介紹了Postgresql中的時(shí)間戳long,TimeStamp,Date,String互轉(zhuǎn)方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-03-03
  • PostgreSql從庫(kù)重新配置的詳情

    PostgreSql從庫(kù)重新配置的詳情

    這篇文章主要介紹了PostgreSql從庫(kù)重新配置的詳情,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-12-12

最新評(píng)論