1、PROCEDURE之參數:
Oracle:會自動轉為大寫,所以不用加"";
EDB:要在參數加"",才能使用。
2、FUNCTION:
Oracle:使用CREATE OR REPLACE FUNCTION可以建立或改變fun的名稱(等於新增),或改變回傳值型態、參數數目及型態等等
EDB:使用CREATE OR REPLACE FUNCTION,
並不能改變fun名稱,或參數型態,也不能改變回傳值之型態,
必須將fun刪除再重新建立。
3.FUNCTION回傳:
Oracle:定義語句為RETURN rettype,
EDB:為RETURNS rettype。
4.FUNCTION:
EDB:與Oracle不同之處
(1)在AS後、END後,要加上$BODY$(直接加$$也可以);
(2)在結束後,要加上LANUAGE 'edbsql' VOLATILE SECURITY DEFINER;
(3)要將FUNCTION授權給enterprisedb
EX.
CREATE OR REPLACE FUNCTION fun_test()
RETURNS character varying AS
$BODY$begin
dbms_output.put_line('test');
return 'aaa';
END$BODY$
LANGUAGE 'edbsql' VOLATILE SECURITY DEFINER;
ALTER FUNCTION fun_test() OWNER TO enterprisedb;
(4)授權
Oracle:grant execute on FUN_TEST to abc;
EDB: gtant execute on function FUN_TEST(character varying) to abc;
5.參數、回傳值:
Oracle:EDB
VARCHAR2 → CHARACTER VARYING
SYS_REFCURSOR → REFCURSOR
6.數值資料型態:
EDB:
(1)INTEGER:沒有小數的整數。範圍-2147483648 ~ +2147483647
(2)NUMBER:使用者指定精確度數值,定義方式和Oracle大致相同,但是小數位數值只能0或正數(oracle可負);
但是有浮點數時速度很慢。範圍可到1000位數。
(3)REAL與DOUBLE PRECISION:儲存浮點數,REAL使用4 byte,DOUBLE PRECISION使用8 byte,
屬於非精確型態,也就是只儲存近似值。
REAL的範圍:1E-37 ~ 1E+37;DOUBLE PRECISION的範圍:1E-307 ~ 1E+308
Postgres Plus Advanced Server有支援一種SQL型態FLOAT與FLOAT(p),
FLOAT(1) ~ FLOAT(24)可取得REAL型態的值,FLOAT(25) ~ FLOAT(53)可取得DOUBLE PRECISION型態的值,
若是沒有給精確度,FLOAT,則是取DOUBLE PRECISION。
7.字元資料型態:
EDB:
(1)CHARACTER VARYING(n)、VARCHAR(n):變動長度字元
(2)CHARACTER(n)、CHAR(n):固定長度字元
(3)TEXT:不限長度之變動長度字元
VARCHAR等同於CHARACTER VARYING;CHAR等同於CHARACTER
8.查詢procedure程式碼內容:
SELECT prosrc FROM pg_proc WHERE proname = 'pro名稱';
9.NULL:
程式中不要出現NULL = NULL的比較式,否則會回傳false的結果。
必要時可以加上NVL函式。