wiki:v6/pgsummary

Version 1 (modified by chenchongqi, 14 years ago) (diff)

--

Oracle 转 PG 汇总

语法

  • rownum 转为 limit
    oracle:
    select title from sns_pclady.msg_message where rownum<=100;
    
    pg:
    select title from sns_pclady.msg_message limit 100;
    
  • 别名要显式指定
    oracle:
    select count(*) from ( select * from 
    (select * from sns_pclady.msg_message where receiver= 6499175  and  delbyreceiver=0  order by posttime desc) where rownum <=1000) where status=0;
    
    pg:
    select count(*) from ( select * from 
    (select * from sns_pclady.msg_message where receiver= 6499175  and  delbyreceiver=0  order by posttime desc) a limit 1000) b where b.status=0;
    
  • 外连接写法调整
    oracle:
    select a.field1, b.field2 from a, b where a.item_id = b.item_id(+)
    
    pg:
    select a.field1, b.field2 from a left outer join b on a.item_id = b.item_id
    
  • sequence写法调整
    oracle:
    sequence_name.nextval
    
    pg:
    nextval('sequence_name') 
    
  • sysdate写法调整
    oracle:
    select sysdate from dual
    
    pg:
    select [db_sysdate] from dual
    
  • decode写法调整
    oracle:
    decode(expr, search, expr[, search, expr...] [, default])
    
    pg:
    CASE WHEN expr THEN expr [...] ELSE expr END
    CASE WHEN c1 = 1 THEN 'match' ELSE 'no match' END
    
  • nvl写法调整
    oracle:
    NVL(hire_date, SYSDATE)
    
    pg:
    coalesce(expr1, expr2, expr3,....)  //这个是否可以代替decode?
    
  • connect by 写法pg不支持
    oracle:
    pg:
    WITH RECURSIVE source (part_no) AS (
    SELECT 2
    UNION ALL
    SELECT part.part_no
    FROM source JOIN part ON (source.part_no = part.parent_part_no)
    )
    SELECT * FROM source;
    

驱动

  • pg 里没有rollback 语句,不会自动rollback ,需要应用里触发异常。
  • 缺省返回的整型是Long
    oracle:
    BigDecimal count = (java.math.BigDecimal?)em.createNativeQuery("select count(*) from table").getSingleResult();
    
    pg:
    Long count = (Long)em.createNativeQuery("select count(*) from table").getSingleResult();