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函式。

arrow
arrow
    全站熱搜

    來自大海的心 發表在 痞客邦 留言(0) 人氣()