寫這篇文正的來源是這樣的,在開發中使用到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,...)