世界因你而精彩___vv

          要么忙著生存,要么趕著去死!人總是要做點什么的!

           

          PostgreSQL 與 Oracle 相異點 (轉)

          ORACLE 與 PostgreSQL 相異點
          NO 問題點 Oracle PostgreSQL
          1 DUAL SELECT 1+1 FROM DUAL SELECT  1+1
          或者
          CREATE VIEW dual AS
                SELECT 'X'::VARCHAR(1) AS DUMMY
          再 SELECT 1+1 FROM DUAL
          2 NEXTVAL SELECT A_TABLE_SEQUENCE.NEXTVAL
          FROM   DUAL
          SELECT NEXTVAL('A_TABLE_SEQUENCE')
          FROM   DUAL
          3 ROWNUM ①SELECT *
          FROM  AGE_TYPE
          WHERE ROWNUM<=5
          ①SELECT *
          FROM AGE_TYPE
          LIMIT 5 OFFSET 0
          ②SELECT *
          FROM AGE_TYPE
          WHERE CODE IS NOT NULL
          AND ROWNUM<=5
          ORDER BY CODE DESC
          ②SELECT  *
          FROM
          AGE_TYPE
          WHERE CODE IS NOT NULL
          ORDER BY CODE DESC
          LIMIT 5 OFFSET 0
          4 (+) ①SELECT *
          FROM A_TABLE A , B_TABLE B
          WHERE A.ID(+)=B.ID
          ①SELECT *
          FROM A_TABLE A
          RIGHT OUTER JOIN
          B_TABLE B
          ON A.ID=B.ID
          ②SELECT *
          FROM A_TABLE A , B_TABLE B
          WHERE A.ID(+)=B.ID
          AND A.COL1='COL1_VALUE'
          ②SELECT *
          FROM A_TABLE A
          RIGHT OUTER JOIN B_TABLE B
          ON A.ID=B.ID AND A.COL1='COL1_VALUE'
          ③SELECT *
          FROM A_TABLE A, B_TABLE B,C_TABLE C,D_TABLE D
          WHERE
          A.ID=B.ID(+) AND
          A.ID=C.ID(+) AND
          A.COL1=D.COL1
          ③SELECT *
          FROM (A_TABLE A
          LEFT OUTER JOIN B_TABLE B
          ON A.ID=B.ID)
          LEFT OUTER JOIN C_TABLE C
          ON A.ID=C.ID,D_TABLE D
          WHERE A.COL1=D.COL1
          ④!!!
          SELECT *
          FROM A_TABLE A
          WHERE A.COL1(+)=0 AND
           A.COL2(+) ='A_VALUE2'
          ④!!!
          SELECT *
          FROM A_TABLE A
          WHERE A.COL1=0 AND
           A.COL2='A_VALUE2'
          WHERE (A.COL1=0 OR A.COL1 IS NULL) AND
           (A.COL2='A_VALUE2' OR A.COL2 IS NULL)
          5 AS SELECT A.COL1  A_COL1,
                     A.COL2  A_COL2
          FROM A_TABLE A
          SELECT A.COL1 AS A_COL1,
                     A.COL2 AS A_COL2
          FROM A_TABLE A
          6 NVL SELECT NVL(SUM(VALUE11),0) FS_VALUE1,
                      NVL(SUM(VALUE21),0) FS_VALUE2
          FROM   FIELD_SUM 
          SELECT COALESCE(SUM(VALUE11),0) AS FS_VALUE1,
                     COALESCE(SUM(VALUE21),0) AS FS_VALUE2
          FROM   FIELD_SUM 
          7 TO_
          NUMBER
          SELECT COL1
          FROM A_TABLE
          ORDER BY TO_NUMBER(COL1)
          SELECT COL1
          FROM A_TABLE
          ORDER BY TO_NUMBER(COL1,999999)
          [注:'999999' ---- 6位數
          COL1字段的度]
          8 DECODE SELECT DECODE(ENDFLAG,'1','A','B') ENDFLAG
          FROM  TEST
          SELECT
          (CASE ENDFLAG
          WHEN '1' THEN 'A'
          ELSE '
          B' END) AS ENDFLAG
          FROM TEST
          9 時間
          問題
          UPDATE A_TABLE
          SET ENTREDATE=SYSDATE
          UPDATE A_TABLE
          SET ENTREDATE=TO_TIMESTAMP(CURRENT_TIMESTAMP,'YYYY-MM-DD HH24:MI:SS')
          或者
          UPDATE A_TABLE
          SET ENTREDATE=CURRENT_TIMESTAMP
          SELECT TO_DATE('20010203','YYYY-MM-DD') AS DAY
          FROM DUAL
          SELECT TO_DATE('20010203','YYYYMMDD') AS DAY
          FROM DUAL

          SELECT TO_DATE('20010203','YYYY-MM-DD') AS DAY
          FROM DUAL
          SELECT TO_DATE(SYSDATE,'YYYY-MM-DD') AS DAY
          FROM DUAL
          SELECT TO_DATE(CURRENT_DATE,'YYYY-MM-DD') AS DAY
          FROM DUAL
          SELECT TO_DATE(SYSDATE,'YYYY/MM/DD') AS DAY
          FROM DUAL
          SELECT TO_DATE(CURRENT_DATE,'YYYY/MM/DD') AS DAY
          FROM DUAL
          10 || SELECT NULL||'-'||NULL AS VALUES1
          FROM DUAL
          SELECT COALESCE(NULL,'')||'-'||COALESCE(NULL,'') AS VALUES1
          FROM DUAL
          SELECT NULL||'-' ||NULL AS VALUES1
          FROM DUAL
          11 aggregate SELECT ROUND(AVG(SUM(BASICCNT1))) BASICCNT
          FROM   ACCESS_INFO_SUM1_V
          WHERE YEARCODE BETWEEN '200305' AND '200505'
          GROUP BY SCCODE
          SELECT  ROUND(AVG(AIV.BASICCNT)) AS BASICCNT
          FROM
              (SELECT SUM(BASICCNT1)      AS BASICCNT
              FROM   ACCESS_INFO_SUM1_V
              WHERE YEARCODE BETWEEN '200305' AND '200505'
              GROUP BY sccode
               ) AIV
          12 「"」 ①SELECT LENGTH('') AS VALUE1 FROM DUAL
          [Result]VALUE1=NULL
          ①SELECT LENGTH('') AS VALUE1 FROM DUAL
          [Result]VALUE1=0
          ②SELECT TO_DATE('','YYYYMMDD') AS VALUE2
          FROM DUAL
          [Result]VALUE2=NULL
          ②SELECT TO_DATE('','YYYYMMDD') AS VALUE2
          FROM DUAL
          [Result]VALUE2=0001-01-01 BC
          ③SELECT TO_NUMBER('',1) AS VALUE3 FROM DUAL
          [Result]VALUE3=NULL
          ③SELECT TO_NUMBER('',1) AS VALUE3 FROM DUAL
          [Result]不能
          ④INSERT INTO TEST(VALUE4)VALUES('')
          [Result]VALUE4=NULL (注:VALUE3字段
          型)
          ④INSERT INTO TEST(VALUE4)VALUES('')
          [Result]VALUE4=0
           (注:VALUE4字段
          型)
          ⑤INSERT INTO TEST(VALUE5)VALUES('')
          [Result]VALUE5=NULL (注:VALUE5字段
          字符型)
          ⑤INSERT INTO TEST(VALUE5)VALUES('')
          [Result]VALUE5=''
           (注:VALUE5字段
          字符型,結果為長度為零的字符串)
          ⑥INSERT INTO TEST(VALUE6)VALUES(TO_DATE('','YYYYMMDD'))
          [Result]VALUE6=NULL (注:VALUE6字段
          為時間類型)
          ⑥INSERT INTO TEST(VALUE6)VALUES(TO_DATE('','YYYYMMDD'))
          [Result]VALUE6=0001-01-01 BC
           (注:VALUE7字段
          為時間類型)
          13 CEIL SELECT CEIL(SYSDATE - TO_DATE('20051027 14:56:10','YYYYMMDD HH24:MI:SS')) AS DAYS
          FROM DUAL
          SELECT
          EXTRACT(DAY FROM (TO_TIMESTAMP(CURRENT_TIMESTAMP,'YYYY-MM-DD-HH24-MI-SS') -TO_TIMESTAMP('2005-10-27 14:56:10','YYYY-MM-DD-HH24-MI-SS') ))+1 AS DAYS
          FROM DUAL
          14 NULLIF 無NULLIF函數 SELECT NULLIF(VALUE1,VALUE2) AS COL1 FROM DUAL
          [注]當VALUE1=VALUE2
          時,COL1=NULL
          15 CONCAT CONCAT(CHAR,CHAR) 創建函數來解決
          CREATE FUNCTION CONCAT(CHAR,CHAR)
          RETURNS CHAR AS
                  'SELECT $1 || $2' LANGUAGE 'sql';
          16 ADD_
          MONTHS
          add_months(date, int) 建函數來解決
          CREATE FUNCTION add_months(date, int)
          RETURNS date AS
          'SELECT ($1 + ( $2::text || ''months'')::interval)::date;'
          LANGUAGE 'sql'
          17 LAST
          _DAY
          LAST_DAY(DATE) 建函數來解決
          CREATE FUNCTION LAST_DAY(DATE)
          RETURNS DATE AS
                  'SELECT date(substr(text($1 +
                          interval(''1 month'')),1,7)||''-01'')-1'
                  LANGUAGE 'sql';
          18 MONTHS
          _BETWEEN
          MONTH_BETWEEN(DATA,DATA) 建函數來解決
          CREATE FUNCTION MONTH_BETWEEN(DATA,DATA)
          RETURNS NUMERIC AS
                  'SELECT to_number((date($1)-
                                     date($2)),''999999999'')/31'
                  LANGUAGE 'sql';
          19 GRE~
          ATEST
          GREATEST (LEAST) 建函數來解決
          CREATE OR REPLACE FUNCTION
             GREATEST(TEXT[]) RETURNS TEXT AS '
          DECLARE
             ARRY ALIAS FOR $1;
             GREATEST TEXT;
          BEGIN
             GREATEST := ARRY[1];
             FOR I IN 1 .. ARRAY_UPPER(ARRY,1) LOOP
                IF ARRY[I] > GREATEST THEN
                  GREATEST := ARRY[I];
                END IF;
             END LOOP;
             RETURN GREATEST;
          END;
          ' LANGUAGE 'PLPGSQL';

          SELECT GREATEST( ARRAY['HARRY','HARRIOT','HAROLD'])
          AS "Greatest";
          20 BITAND BITAND(int,int) SELECT 値 & 値;
          21 子條件   在FROM子條件中字段須有列名,
          處理方法用AS +別名
          22 MINUS MINUS 以EXCEPT來替代
          23 BIN_
          TO_
          NUM
          SELECT BIN_TO_NUM(1,0,1,0) AS VALUE1 FROM DUAL SELECT CAST(B'1010' AS INTEGER) AS VALUE1


          要么忙著生存,要么趕著去死!人總是要做點什么的!

          posted on 2008-01-03 14:56 vv 閱讀(903) 評論(0)  編輯  收藏 所屬分類: DB


          只有注冊用戶登錄后才能發表評論。


          網站導航:
           

          導航

          統計

          常用鏈接

          留言簿(2)

          隨筆分類(4)

          隨筆檔案(7)

          文章分類(10)

          文章檔案(11)

          相冊

          最新隨筆

          搜索

          最新評論

          • 1.?re: 過濾頁面中沒有用到的圖片[未登錄]
          • 在非洲,瞪羚每天早上醒來時,他知道自己必須跑的比最快的獅子還快,否則就會被吃掉.獅子每天早上醒來時,他知道自己必須追上跑得最慢的瞪羚,否則就會被餓死.不管你是獅子還是瞪羚,當太陽升起時,你最好開始奔跑
          • --Eleven

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 博湖县| 襄樊市| 铜梁县| 梧州市| 淮安市| 赤城县| 珠海市| 旅游| 自治县| 江源县| 西宁市| 磴口县| 曲麻莱县| 当涂县| 金溪县| 肇东市| 舒城县| 沁阳市| 临城县| 汶上县| 商水县| 长子县| 黔东| 乡城县| 宣武区| 天柱县| 镇赉县| 洞口县| 墨玉县| 汉沽区| 大洼县| 保靖县| 文安县| 邵东县| 清新县| 马鞍山市| 建瓯市| 修水县| 平顶山市| 卢氏县| 武川县|