本文完全转载自:http://my.oschina.net/liyuj/blog/539303?fromerr=L3ZJLcuW&utm_source=tuicool&utm_medium=referral

摘要

Oracle迁移PostgreSQL数据库经验总结(SQL部分,未完待续),本文只包括了我工作中接触到或者用到的技术点,其实两个数据库设计上的差异是很大的,但是Oracle数据库有的功能,PostgreSQL大体上也都能实现
序号 项目 Oracle PostgreSQL
1 当前时间 SYSDATE 可全部使用current_timestamp替换
2 序列 SEQNAME.NEXTVAL NEXTVAL('SEQNAME')
3 固定值列 SELECT '1' AS COL1 SELECT CAST('1' AS TEXT) AS COL1
4 NVL NVL函数 NVL可以用COALESCE函数替换
5 类型自动转换 Oracle某些情况下支持类型自动转换 会出现类型不匹配等错误,需要在Java或者sql中进行类型转换,使类型匹配
6 INSTR函数 instr('str1','str2') strpos('str1','str2')
7 外连接 Oracle可简写为(+) 用LEFT JOIN等语句替换
8 层次查询 START WITH语句
CONNECT BY语句
用WITH RECURSIVE语句
9 数据库对象大小写 不区分大小写 创建数据库对象时要小写,这样才不区分SQL的大小写
10 同义词 Oracle支持同义词 用视图代替
11 DUAL SELECT 1+1 FROM DUAL SELECT 1+1
或者
CREATE VIEW dual AS
      SELECT current_timestamp
12 ROWNUM ROWNUM关键字 两种情况:
1.限制结果集数量,用于翻页等:
SELECT * FROM T LIMIT 5 OFFSET 0
2.生成行号:
ROW_NUMBER() OVER()
13 DECODE等判断函数 DECODE() 用标准的CASE WHEN THEN ELSE END语句替换
14 TO_CHAR TO_CHAR(COL,FMT),格式化字符串可以为空 TO_CHAR(COL1,'FM999999'),9的个数为字段长度,详细定义见:
http://www.postgresql.org/docs/9.4/static/functions-formatting.html
15 TO_NUMBER TO_NUMBER(COL,FMT),格式化字符串可以为空 TO_NUMBER(COL1,'999999'),9的个数为字段长度,详细定义见:
http://www.postgresql.org/docs/9.4/static/functions-formatting.html
16 NULL和'' ORACLE认为''等同于NULL NULL和''不同
17 NULL和'' LENGTH('')为NULL LENGTH('')为0
18 NULL和'' TO_DATE('','YYYYMMDD')为空 TO_DATE('','YYYYMMDD')为0001-01-01 BC
19 NULL和'' TO_NUMBER('',1)为NULL TO_NUMBER('',1),报错
20 NULL和'' INSERT INTO TEST(VALUE4)VALUES('')
[Result]VALUE4=NULL (注:VALUE3字段为数值类型)
INSERT INTO TEST(VALUE4)VALUES('')
VALUE4=NULL
21 NULL和'' INSERT INTO TEST(VALUE4)VALUES('')
[Result]VALUE4=NULL (注:VALUE3字段为字符类型)
INSERT INTO TEST(VALUE4)VALUES('')
VALUE4=''
22 NULL和'' INSERT INTO TEST(VALUE4)VALUES(TO_DATE('','YYYYMMDD'))
[Result]VALUE4=NULL (注:VALUE3字段为时间类型)
INSERT INTO TEST(VALUE6)VALUES(TO_DATE('','YYYYMMDD'))
[Result]VALUE6=0001-01-01 BC
23 ADD_MONTHS ADD_MONTHS(DATE,INT) CREATE FUNCTION add_months(date, int)
RETURNS date AS
'SELECT ($1 +($2::text||'' month'')::interval)::date'
LANGUAGE 'sql'
或SQL:
SELECT ($1 +($2::text||' month')::interval)
24 LAST_DAY LAST_DAY(DATE) 创建函数来解决
CREATE OR REPLACE FUNCTION last_day(date)
RETURNS date AS
$$
  SELECT (date_trunc('MONTH', $1) + INTERVAL '1 MONTH - 1 day')::date;
$$ LANGUAGE 'sql';
或SQL:
SELECT (date_trunc('MONTH', $1) + interval '1 month - 1 day')::date;
25 MONTHS_BETWEEN MONTHS_BETWEEN(DATE,DATE) 创建函数来解决
CREATE FUNCTION MONTH_BETWEEN(d1 timestamp,d2 timestamp)
RETURNS NUMERIC AS
        'SELECT (extract(year from age(d1,d2))*12 + extract(month from age(d1,d2)))::integer'
        LANGUAGE 'sql';
26 BITAND BITAND(A,B) A & B
27 MINUS MINUS语句 以EXCEPT语句来替代
28 BIN_ SELECT BIN_TO_NUM(1,0,1,0) AS VALUE1 FROM DUAL SELECT CAST(B'1010' AS INTEGER) AS VALUE1
29 UPDATE语句列列表 UPDATE accounts SET (contact_last_name, contact_first_name) =
    (SELECT last_name, first_name FROM salesmen
     WHERE salesmen.id = accounts.sales_id);
不支持该语法,需要拆分为多个单独的列
30 SUBSTR函数 如果从第一个开始取子串,可以从0开始,也可以从1开始,如果不是第一个开始,则从1开始计数,可以为负值,从字符串结尾计数,用于取最后几位。 从1开始计数。如果要取最后几位,可以用RIGHT函数解决。
31 子查询别名 如果FROM后只有一个子查询,该子查询可以没有别名 必须有别名
32 列(别)名为关键字 Oracle中比如name,type这样的关键字可以直接作为列的别名,比如:select xx name from t 需要加as,比如select xx as name from t
33 当前登录用户 SELECT USER FROM DUAL select current_user
34 ALL_COL_COMMENTS 通过SELECT * FROM ALL_COL_COMMENTS可以获得列注释信息 select s.column_name as COLUMN_NAME,coalesce(col_description(c.oid,ordinal_position) ,s.column_name) as COMMENTS
from information_schema.columns s,pg_class c
where s.table_name = 'ac01_si' and s.table_name = c.relname
and s.table_schema = current_schema()
PG需要通过col_description获得列注释信息
35 修改表字段类型 1.如果字段无数据,可直接修改
2.如果有数据且新类型和原类型兼容,也可以直接修改
3.如果不兼容,可通过对原字段改名,然后增加新字段,再通过UPDATE语句对数据进行处理
1.如果新类型和原类型兼容,可直接修改
2.如果不兼容,需要使用USING关键字然后提供一个类型转换的表达式
       

Oracle迁移PostgreSQL经验总结相关推荐

  1. oracle迁移postsql的,osdba's blog : Oracle迁移PostgreSQL系列文章之二:merge语句

    Oracle迁移PostgreSQL系列文章之二:merge语句 Posted on 2015-03-06 11:12:46 by osdba 我们知道,Oracle中有一个特别的merge语句.而P ...

  2. 【Oracle】去IOE(IBM服务器,Oracle,EMC存储),Oracle迁移postgreSQL部分问题解决方案

    Oracle迁移postgreSQL部分问题解决方案 "去IOE化"理念最早是由阿里巴巴提出.具体就是要把公司里IBM服务器.Oracle数据库.EMC存储都替换掉, 更换为开源或 ...

  3. 连载二:Oracle迁移文章大全

    (共45篇干货文章,建议收藏并在PC端打开) 1. ASM新加DG,数据文件如何迁移 https://www.modb.pro/db/307 2. AIX环境dd迁移控制文件出现ORA-202和ORA ...

  4. oracle 迁移PG 博客

    金融实战演练:从Oracle迁移到PG的技术实现 - PGSQL - dbaplus社群:围绕Data.Blockchain.AiOps的企业级专业社群.技术大咖.原创干货,每天精品原创文章推送,每周 ...

  5. 从Oracle迁移到PostgreSQL的十大理由

    作者:保罗·纳穆格 Paul Namuag能够担任各种职务,受益于在过去的18年中有机会使用各种技术.他从2005年开始担任图形艺术家和MS .Net开发人员,并转而使用开源技术,并且是使用LAMP ...

  6. Oracle数据库迁移postgreSQL

    Oracle数据库迁移PostgreSQL 本文将记录一下Oracle数据库迁移至PostgreSQL数据库的整个过程,主要使用Navicat Premium 16以及pgAdmin 4来实现.参考: ...

  7. migrate oracle dell,How to Migrate Oracle to PostgreSQL

    最近在做 oracle 转 PostgreSQL 项目调研,部分业务需要由 oracle 数据库迁移到 PostgreSQL 平台,这几天在做这方面的调研,暂时有几分心得. Oracle 转 pg 显 ...

  8. Oracle 迁移至 MySQL、PG等分布式数据库,可能遇到的12个典型问题

    近年来,分布式数据库逐渐占据了OLTP领域较大的市场,尤其在互联网领域,MySQL.PG等分布式数据库的应用非常广泛.随着软件国产化.自主可控战略的提出,非互联网企业也开始考虑数据库转型,很多企业原本 ...

  9. 【原创】MySQL 实现Oracle或者PostgreSQL的row_number over 这样的排名语法

    PostgreSQL 和Oracle 都提供了 row_number() over() 这样的语句来进行对应的字段排名, 很是方便.  MySQL却没有提供这样的语法. 最近由于从Oracle 迁移到 ...

最新文章

  1. 使用who.is查域名DNS信息以及用sameip.org查其他网站
  2. CNN+Transformer=SOTA!CNN丢掉的全局信息,Transformer来补
  3. cad版本在线转换_CAD版本转换中将图纸转换为AutoCAD2018版本的方法
  4. java 包含汉字,【转载】Java判断字符串中是不是包含汉字
  5. 马斯克躺枪得州最严堕胎法案,因拒绝表态遭炮轰!“不站女权就抵制特斯拉”...
  6. Tribonacci(泰波那契)数列前n项和的求解问题
  7. 光缆连接头符号缩写详解
  8. 数据中心虚拟化的8大好处
  9. 蒙提霍尔游戏 python 模拟
  10. 函数调用 压栈的工作原理
  11. java中同步组件_Java并发编程(自定义同步组件)
  12. Windows下Spring3.x计划任务实现定时备份MySql数据库
  13. 细数一行代码改变结局的炼丹骚操作
  14. 分式混合运算20道题_FAG剖分式调心滚子轴承的性能
  15. C# Winfrom DataGridView DataSource绑定数据源后--解决排序问题
  16. 每日一题/012/数学分析/求极限/拉格拉日中值定理/幂指函数求导
  17. 大型电子病历系统【整套源代码分享】
  18. 数字交通灯设计(Multisim仿真+PCB实物)
  19. P1527,JZOJ 2908【集训队互测 2012】矩阵乘法(mat)
  20. 西方占星术中的人体十二宫

热门文章

  1. php rewrite重写,yaf 自定义重写路由rewrite
  2. python引用参数在哪里_参数在Python中是否通过引用传递
  3. maven伺服搭建_Maven私服搭建
  4. python字符串补空格输出_python实现指定字符串补全空格、前面填充0的方法
  5. 测试所有类型的Class
  6. 整除光棍 (20 分)
  7. python爬取学校题库_Python爬虫面试题
  8. OpenCV3.1.0+VS2013测试程序
  9. 简单php文件编写语法
  10. 分形之城:递归超典型例题,还没明白?手把手画给你看!