与oracle的区别

1、数据类型区别

Oracle

PostgresQL

注释

VARCHAR2

VARCHAR(character

varying)

Long、

CLOB

TEXT

DATE

DATE/TIME/TIMESTAMP

DATE仅包含日期、TIME仅包含时间、TIMESTAMP均包含,通常使用DATE

NUMBER

SMALLINT/INTEGER/BIGINT/NUMERIC/REAL/DOUBLE

PRECISION

通常可用NUMERIC

BLOB

BYTEA

sysdate

now()、O_TIMESTAMP(CURRENT_TIMESTAMP,'YYYY-MM-DD

HH24:MI:SS')、CURRENT_TIMESTAMP

取系统当前时间

--PostgresQL中字段名称区分大小写,为保证兼容性,强烈建议脚本中的字符均用小写,这样在SQL语句中将忽略大小写--PostgresQL中字段类型的括号中只能出现数字

2、语句与方法的区别

Function

Returns

Description

Example

to_char(timestamp,

text)

text

convert time stamp to

string

to_char(timestamp

'now','HH12:MI:SS')

to_char(interval,

text)

text

convert interval to

string

to_char(interval '15h

2m 12s','HH24:MI:SS')

to_char(int,

text)

text

convert integer to

string

to_char(125,

'999')

to_char(double

precision, text)

text

convert real/double

precision to string

to_char(125.8,

'999D9')

to_char(numeric,

text)

text

convert numeric to

string

to_char(numeric

'-125.8', '999D99S')

to_date(text,

text)

date

convert string to

date

to_date('05 Dec 2000',

'DD Mon YYYY')

to_timestamp(text,

text)

timestamp

convert string to time

stamp

to_timestamp('05 Dec

2000', 'DD Mon YYYY')

to_number(text,

text)

numeric

convert string to

numeric

to_number('12,454.8-',

'99G999D9S')

(1)注意增加约束时的写法,和ORACLE略有不同

Oracle:

ALTER TABLE SCHEMA.PREFIX_INFO ADD (

CONSTRAINT

PK_PREFIX_INFO PRIMARY KEY (INFO_ID));

PostgresQL:

alter table schema.prefix_info add

constraint prefix_info_pkey primary key(info_id);

(2)系统默认的最大值与ORACLE不同

Oracle:

CREATE SEQUENCE

PREFIX_INFO_SEQUENCE

INCREMENT BY 1

START WITH 582

MINVALUE 1

MAXVALUE 9999999999999999999999999999

NOCYCLE

CACHE 20

NOORDER;

PostgresQL:

CREATE SEQUENCE

schema.prefix_info_sequence

increment 1

minvalue 1

maxvalue

9223372036854775807

start 582

cache 20;

(3)PostgresQL中的

||用法与其他数据库不同:select a||b from

table1;当a或b其中一个为null时,该查询返回null,

(4)PostgresQL中没有concat函数,且由于||用法的问题,无法使用||替换,解决方法为在public

schema中创建函数concat

create or replace function

concat(text, text)

returns text as

$body$select coalesce($1,'') ||

coalesce($2,'')$body$

language 'sql' volatile;

alter function concat(text,

text) owner to postgres;

--无需特殊授权即可在其他schema中使用

(4)PostgresQL中没有dual虚拟表,为保证程序兼容性,可创建伪视图(view)替代:

CREATE OR REPLACE VIEW dual AS

SELECT NULL::"unknown"

WHERE 1 = 1;

ALTER TABLE dual

OWNER TO postgres;

GRANT ALL ON TABLE dual TO postgres;

GRANT SELECT ON

TABLE dual TO public;

必须授权public以select权限

(5)关联查询用法区别

ORACLE:

简单外连接:

SELECT

COUNT(DISTINCT(A.COL1)) AS RCOUNT FROM

SCHEMA.PREFIX_TABLE1

A,SCHEMA.PREFIX_TABLE2 B

WHERE 1 = 1

AND A.COL2 = B.COL2(+)

AND A.COL3

> 0

AND A.COL4 = '1'

超级变态外连接:

SELECT

COUNT(DISTINCT(A.COL1)) AS RCOUNT FROM

SCHEMA.PREFIX_TABLE1

A,SCHEMA.PREFIX_TABLE2 B,SCHEMA.PREFIX_TABLE3 C,SCHEMA.PREFIX_TABLE4 D

WHERE

1 = 1

AND A.COL2 = B.COL2

AND A.COL3 = C.COL3(+)

AND A.COL4 =

D.COL4(+)

AND A.COL5 > 0

AND A.COL6 = '1'

POSTGRESQL:

简单外连接:

select

count(distinct(a.col1)) as rcount from

schema.prefix_table1 a left outer

join schema.prefix_table2 b on (a.col2 = b.col2)

where 1 = 1

and a.col3

> 0

and a.col4 = '1'

超级变态外连接:

select

count(distinct(a.col1)) as rcount from

schema.prefix_table1 a inner join

schema.prefix_table2 b on (a.col2 = b.col2)

left outer join

schema.prefix_table3 c on (a.col3 = c.col3)

left outer join

schema.prefix_table4 d on (a.col4 = d.col4)

where 1 = 1

and a.col5 >

0

and a.col6 = '1'

(6)PostgresQL中子查询较为规范,子查询结果集必须拥有alias

ORACLE:

SELECT * FROM (

SELECT

* FROM (

SELECT * FROM SCHEMA.PREFIX_TABLE ORDER BY COL1

) WHERE X=1 ORDER

BY COL2

) WHERE Y=2 ORDER BY COL3

POSTGRESQL:

SELECT * FROM (

SELECT * FROM

(

SELECT * FROM SCHEMA.PREFIX_TABLE ORDER BY COL1 ALIAS1

) WHERE X=1 ORDER

BY COL2 ALIAS2

) WHERE Y=2 ORDER BY COL3

(7)

PostgresQL中没有rownum,无法使用where rownum < =

X的方法进行分页,取而代之的是limit X,offset

Y方法,而ORACLE中不允许使用LIMIT

X的方法

ORACLE:

SELECT * FROM ( SELECT * FROM (SELECT

* FROM SCHEMA.PREFIX_TABLE1 ORDER BY COL1 DESC,COL2 ASC) where ROWNUM <= 50

ORDER BY COL3 ASC,COL4 DESC)

WHERE ROWNUM <= 20 ORDER BY COL5 DESC,COL6

ASC;

POSTGRES:

select * from ( select * from (SELECT

* FROM SCHEMA.PREFIX_TABLE1 ORDER BY COL1 DESC,COL2 ASC) selb order by col3

asc,col4 desc limit 50 ) sela

order by col5 desc,col6 asc limit

20;

--注意!!limit必须用于order by之后

--例:取1到50条数据

select * from

VOIP_FEE_RATE temp offset 0 limit 50

(8)序列使用的区别

ORACLE:SELECT SCHEMA.PREFIX_TABLE1_SEQUENCE.NEXTVAL AS nCode

FROM DUAL

POSTGRES:SELECT

NEXTVAL('SCHEMA.PREFIX_TABLE1_SEQUENCE') AS nCode FROM DUAL

--注意,此方法前提是dual视图已建立,如没有,可省略FROM

DUAL

pg与oracle区别,PostgresQL 学习记录之与oracle区别(一)相关推荐

  1. sql server 2008连接oracle操作步骤详细记录,SQLServer连接Oracle详细步骤

    我们知道SQL Server和Oracle其实很多原理都类似.特别是一些常用的SQL语句都是按照标准来.所以它们也可以有一定的互操作性的.这里 我们知道SQL Server和Oracle其实很多原理都 ...

  2. 编程学习记录12:Oracle数据库的一些基本操作2,表相关操作,添加约束

    数据库中表的创建一般需要考虑三部分:表名.列名及类型.列的约束 表名:没什么要求,只要不重名就行. 常用数据类型: 1.字符类型 1)CHAR(长度):定长字符串,位数不足时用空格填充 2)VARCH ...

  3. Oracle SQL脚本学习记录一

    2019独角兽企业重金招聘Python工程师标准>>> set serveroutput on declare v_age number; begin v_age:=12; v_ag ...

  4. 编程学习记录13:Oracle数据库,表的查询

    表达查询是数据库中最常用的操作,最基本的语句为 SELECT <列名.值.函数> FROM <表名> 当在 SELECT 后使用 * 即表示所查询表中的所有列,如SELECT ...

  5. 编程学习记录11:Oracle数据库的一些基本操作1,创建用户,授权

    登录指令: 初始管理员登录,在命令窗口输入sqlplus / as sysdba 进行登录, 普通用户登录 在命令窗口输入sqlplus 后会出现输入账号密码,输入密码时不会显示. 修改用户指令: 创 ...

  6. oracle 查询修改表记录,如何查询oracle表中的update操作记录的scn

    oracle查询表中bai数据行(row)上最后的duDML时间 zhi第一种方式(块级跟踪): select ora_rowscn, dbms_rowid.ROWID_BLOCK_NUMBER(ro ...

  7. oracle报12541错误,记录一次oracle无缘无故就无监听,报TNS-12541等错误的问题

    没人动服务器,无缘无故数据库连接挂了,直接报:TNS-12541: TNS: 无监听程序 TNS-12560: TNS: 协议适配器错误 TNS-00511: 无监听程序 以前遇到过两次,当时无力解决 ...

  8. 责任分配矩阵和raci的区别_PyTorch学习笔记——repeat()和expand()区别

    torch.Tensor是包含一种数据类型元素的多维矩阵. A torch.Tensor is a multi-dimensional matrix containing elements of a ...

  9. Oracle开发实战学习

    Oracle开发实战学习 文章目录 Oracle开发实战学习 第1章 Oracle关系数据库 作业: 第2章Oracle数据库的体系结构 2.1 Oracle的物理存储结构 2.2 Oracle的逻辑 ...

最新文章

  1. 2021年春季学期-信号与系统-第三次作业参考答案-第十一道题
  2. 设置maxJsonLength,解决ajax通过POST方式调用.net的webService时,数据过长时服务器返回500错误的问题
  3. WPS演示中万花筒效果的实现
  4. Java熔断框架有哪些_降级熔断框架 Hystrix 源码解析:滑动窗口统计
  5. Array.Sort方法
  6. 基于JAVA+SpringBoot+Vue+Mybatis+MYSQL的物资管理系统
  7. python使用redis做缓存_python实现类redis缓存
  8. 设计模式原则之六:依赖倒置原则
  9. Visual Studio2019配置备忘
  10. 【Postgresql】pg截取第一个和最后一个字符
  11. 【人工智能项目】LSTM实现电影评论情感分类实验
  12. 家庭自酿葡萄酒入门(转)
  13. 给自己一个拼搏的理由
  14. python 简洁优雅的装饰数据类——dataclass(通过生成只有部分属性值的子类解决初始化时没有默认值必须传所有字段值的问题)
  15. mysql jdbc execute_MySQL JDBC Statement.executeBatch实践问题
  16. 1.3.随机变量,随机向量的自相关与自协方差
  17. 华为手机耳机sws音效是什么_华为M3平板的SWS 3.0技术对于音效有哪些改善?
  18. 鸡尾酒排序算法c语言源代码,排序算法之鸡尾酒排序
  19. vsto 隐藏前面的列滚动条在后面需要滚动到最前面
  20. 女程序员,为什么比男程序员少???

热门文章

  1. tomcat下运行cxf异常 java.lang.ClassCastException
  2. 适合做手机铃声的81首歌_“想下载这首歌作为你的手机铃声吗?”
  3. 二模网络_初二 八下英语 教学课件、作业课件、教案等(网络资源)
  4. 哪些名人在学python_盘点计算机界十位顶级人物,看看你认识几个?
  5. qq安全保护进程更改计算机,分享win10电脑系统关闭qq安全防护进程的步骤
  6. String Modification CodeForces - 1316B(规律)
  7. codeforces(牛客网dp专题,排序)
  8. CIKM 2021 | 基于异质图学习的搜索广告关键词推荐
  9. bytes转16进制整数 python_Python 十进制转二进制、八进制、十六进制
  10. c语言股票软件开发,一种使用Objcctivc语言开发的股票软件系统的制作方法