PostgreSQL 存儲過程


寫這篇文正的來源是這樣的,在開發中使用到PostgreSQL數據庫,編寫存儲過程時遇到一些問題和SQLServer還有點區別,在此就順手寫在了博客上,后備無患。 

PostgreSQL 存儲過程定義格式如下:

■結構 PL/pgSQL是一種塊結構的語言,比較方便的是用pgAdmin III新建Function,填入一些參數就可以了。

基本上是這樣的:

CREATE OR REPLACE FUNCTION 函數名(參數1,[整型 int4, 整型數組 _int4, ...])  RETURNS 返回值類型 AS  $BODY$  DECLARE 變量聲明  BEGIN 函數體  END;  $BODY$  LANGUAGE ‘plpgsql’ VOLATILE;

■變量類型 除了postgresql內置的變量類型外,常用的還有 RECORD ,表示一條記錄。

■賦值 賦值和Pascal有點像:“變量 := 表達式;”  有些奇怪的是連接字符串的是“||”,比如 sql := ‘SELECT * FROM’ || table || ‘WHERE …’;

■判斷   判斷又和VB有些像:  IF 條件 THEN …  ELSEIF 條件 THEN …  ELSE …  END IF;

 ■循環   循環有好幾種寫法:  WHILE expression LOOP  statements  END LOOP;  還有常用的一種是:(從1循環到9可以寫成FOR i IN 1..9 LOOP)  FOR name IN [ REVERSE ] expression .. expression LOOP  statements  END LOOP;

 ■其他   還有幾個常用的函數:  SELECT INTO record …; 表示將select的結果賦給record變量(RECORD類型)  PERFORM query; 表示執行query並丟棄結果  EXECUTE sql; 表示執行sql語句,這條可以動態執行sql語句(特別是由參數傳入構造sql語句的時候特別有用)

--簡單的例子:

例1:無返回值

CREATE OR REPLACE FUNCTION 函數名稱( 參數1,參數2,...)
   AS
$BODY$
DECLARE  --定義 
BEGIN
INSERT INTO "表名" VALUES(參數1,參數2,...);
END
$BODY$
LANGUAGE 'plpgsql' VOLATILE;  -- 最后別忘了這個。

例2:有返回值

CREATE OR REPLACE FUNCTION 函數名稱(deptcode VARCHAR(20) ,deptname VARCHAR(60) ,pycode VARCHAR(60),isenabled CHAR(1))
RETURNS BOOLEAN  --返回值,布爾類型
AS
$body$
DECLARE
deptcode VARCHAR(20);
deptname VARCHAR(60);
pycode  VARCHAR(60);
isenabled CHAR(1);
BEGIN
UPDATE "deptDict" SET deptcode=deptcode,deptname=deptname,pycode=pycode,isenabled=isenabled,updatedhisdatetime=CURRENT_TIMESTAMP
WHERE deptcode=deptcode;

RETURN TRUE; 
END
$body$ 
LANGUAGE 'plpgsql' VOLATILE;

最后再加上如何執行這個存儲過程(函數)

-- 執行存儲過程方法1
SELECT * FROM 函數名稱(參數1,參數2,...)
-- 執行存儲過程方法2
SELECT  函數名稱('0參數1,參數2,...)

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM