postgresql 存儲函數(shù)調(diào)用變量的3種方法小結(jié)
一、假設(shè)有表student,字段分別有id,remark,name等字段。
二、寫一個存儲函數(shù),根據(jù)傳過去的變量ID更新remark的內(nèi)容。
調(diào)用該存儲函數(shù)格式如下:
select update_student(1);
三、存儲函數(shù)示例如下:
CREATE OR REPLACE FUNCTION public.update_student(id integer) RETURNS text AS $BODY$ declare sql_str_run text; BEGIN /* --method 1 select 'update student set remark ='''|| now() ||''' where student.id = '|| $1 into sql_str_run ; execute sql_str_run; --method 2 execute 'update student set remark =now() where student.id=$1' using $1; */ --method 3 update student set remark =now() where student.id=$1; return 'update is ok' ; end $BODY$ LANGUAGE plpgsql VOLATILE
以上三種方法都可以實現(xiàn)同樣的效果,實際應(yīng)用中,可以結(jié)合場景來使用。比較簡單的情況下直接用method 3。
比如,表名、字段名本身是變量,那么method 3 就無法實現(xiàn),需要根據(jù)method 1或method 2來實現(xiàn)。
method 1或method 2 有什么區(qū)別呢?
如果需要拼的變量可以直接獲取的,則用method2即可。如果變量本身也是需要需要通過函數(shù)或語句的計算來獲得,一般建議用method 1,先拼成一個字符串,再調(diào)用execute來實現(xiàn)。
補充:postgresql存儲函數(shù)/存儲過程用sql語句來給變量賦值
--定義變量
a numeric;
方式一:
select sqla into a from table1 where b = '1' ; --這是sql語句賦值
方式二:
sql1:= 'select a from table1 where b = ' '1' ' '; execute sql1 into a; --這是執(zhí)行存儲函數(shù)賦值
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。如有錯誤或未考慮完全的地方,望不吝賜教。
相關(guān)文章
PostgreSQL表操作之表的創(chuàng)建及表基礎(chǔ)語法總結(jié)
在PostgreSQL中創(chuàng)建表命令用于在任何給定的數(shù)據(jù)庫中創(chuàng)建新表,下面這篇文章主要給大家介紹了關(guān)于PostgreSQL表操作之表的創(chuàng)建及表基礎(chǔ)語法的相關(guān)資料,文中通過代碼介紹的非常詳細,需要的朋友可以參考下2024-05-05
postgresql 兩表關(guān)聯(lián)更新操作
這篇文章主要介紹了postgresql 兩表關(guān)聯(lián)更新操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2021-01-01
PostgreSQL字符切割:substring函數(shù)的用法說明
這篇文章主要介紹了PostgreSQL字符切割:substring函數(shù)的用法說明,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2021-02-02
基于PostgreSQL的時序數(shù)據(jù)庫TimescaleDB的基本用法和概念
時序數(shù)據(jù)是指按照時間順序存儲的數(shù)據(jù),TimescaleDB是一個開源的、擴展了PostgreSQL的時序數(shù)據(jù)庫擴展,本文就給大家詳細的介紹一下基于PostgreSQL的時序數(shù)據(jù)庫TimescaleDB的基本用法和概念,需要的朋友可以參考下2023-06-06
postgresql查詢每個月的最后一天日期并對未查到的日期結(jié)果補0(操作示例)
這篇文章主要介紹了postgresql查詢每個月的最后一天日期,并對未查到的日期結(jié)果補0,pgsql需要使用函數(shù)使用date_trunc()函數(shù)找到指定月第一天,然后對該日期先加一個月在減一個月就能得到你傳給的日期的最后一天日期,感興趣的朋友跟隨小編一起看看吧2023-10-10
DBeaver中PostgreSQL數(shù)據(jù)庫顯示不全的解決方法
最近,在DBeaver中連接了本地的PostgreSQL數(shù)據(jù)庫,但是連接后打開這個數(shù)據(jù)庫時發(fā)現(xiàn),數(shù)據(jù)庫顯示不全,所以本文給大家介紹了DBeaver中PostgreSQL數(shù)據(jù)庫顯示不全的解決方法,需要的朋友可以參考下2024-11-11

