pg与oracle区别,PostgresQL 学习记录之与oracle区别(一)
与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区别(一)相关推荐
- sql server 2008连接oracle操作步骤详细记录,SQLServer连接Oracle详细步骤
我们知道SQL Server和Oracle其实很多原理都类似.特别是一些常用的SQL语句都是按照标准来.所以它们也可以有一定的互操作性的.这里 我们知道SQL Server和Oracle其实很多原理都 ...
- 编程学习记录12:Oracle数据库的一些基本操作2,表相关操作,添加约束
数据库中表的创建一般需要考虑三部分:表名.列名及类型.列的约束 表名:没什么要求,只要不重名就行. 常用数据类型: 1.字符类型 1)CHAR(长度):定长字符串,位数不足时用空格填充 2)VARCH ...
- Oracle SQL脚本学习记录一
2019独角兽企业重金招聘Python工程师标准>>> set serveroutput on declare v_age number; begin v_age:=12; v_ag ...
- 编程学习记录13:Oracle数据库,表的查询
表达查询是数据库中最常用的操作,最基本的语句为 SELECT <列名.值.函数> FROM <表名> 当在 SELECT 后使用 * 即表示所查询表中的所有列,如SELECT ...
- 编程学习记录11:Oracle数据库的一些基本操作1,创建用户,授权
登录指令: 初始管理员登录,在命令窗口输入sqlplus / as sysdba 进行登录, 普通用户登录 在命令窗口输入sqlplus 后会出现输入账号密码,输入密码时不会显示. 修改用户指令: 创 ...
- oracle 查询修改表记录,如何查询oracle表中的update操作记录的scn
oracle查询表中bai数据行(row)上最后的duDML时间 zhi第一种方式(块级跟踪): select ora_rowscn, dbms_rowid.ROWID_BLOCK_NUMBER(ro ...
- oracle报12541错误,记录一次oracle无缘无故就无监听,报TNS-12541等错误的问题
没人动服务器,无缘无故数据库连接挂了,直接报:TNS-12541: TNS: 无监听程序 TNS-12560: TNS: 协议适配器错误 TNS-00511: 无监听程序 以前遇到过两次,当时无力解决 ...
- 责任分配矩阵和raci的区别_PyTorch学习笔记——repeat()和expand()区别
torch.Tensor是包含一种数据类型元素的多维矩阵. A torch.Tensor is a multi-dimensional matrix containing elements of a ...
- Oracle开发实战学习
Oracle开发实战学习 文章目录 Oracle开发实战学习 第1章 Oracle关系数据库 作业: 第2章Oracle数据库的体系结构 2.1 Oracle的物理存储结构 2.2 Oracle的逻辑 ...
最新文章
- 2021年春季学期-信号与系统-第三次作业参考答案-第十一道题
- 设置maxJsonLength,解决ajax通过POST方式调用.net的webService时,数据过长时服务器返回500错误的问题
- WPS演示中万花筒效果的实现
- Java熔断框架有哪些_降级熔断框架 Hystrix 源码解析:滑动窗口统计
- Array.Sort方法
- 基于JAVA+SpringBoot+Vue+Mybatis+MYSQL的物资管理系统
- python使用redis做缓存_python实现类redis缓存
- 设计模式原则之六:依赖倒置原则
- Visual Studio2019配置备忘
- 【Postgresql】pg截取第一个和最后一个字符
- 【人工智能项目】LSTM实现电影评论情感分类实验
- 家庭自酿葡萄酒入门(转)
- 给自己一个拼搏的理由
- python 简洁优雅的装饰数据类——dataclass(通过生成只有部分属性值的子类解决初始化时没有默认值必须传所有字段值的问题)
- mysql jdbc execute_MySQL JDBC Statement.executeBatch实践问题
- 1.3.随机变量,随机向量的自相关与自协方差
- 华为手机耳机sws音效是什么_华为M3平板的SWS 3.0技术对于音效有哪些改善?
- 鸡尾酒排序算法c语言源代码,排序算法之鸡尾酒排序
- vsto 隐藏前面的列滚动条在后面需要滚动到最前面
- 女程序员,为什么比男程序员少???
热门文章
- tomcat下运行cxf异常 java.lang.ClassCastException
- 适合做手机铃声的81首歌_“想下载这首歌作为你的手机铃声吗?”
- 二模网络_初二 八下英语 教学课件、作业课件、教案等(网络资源)
- 哪些名人在学python_盘点计算机界十位顶级人物,看看你认识几个?
- qq安全保护进程更改计算机,分享win10电脑系统关闭qq安全防护进程的步骤
- String Modification CodeForces - 1316B(规律)
- codeforces(牛客网dp专题,排序)
- CIKM 2021 | 基于异质图学习的搜索广告关键词推荐
- bytes转16进制整数 python_Python 十进制转二进制、八进制、十六进制
- c语言股票软件开发,一种使用Objcctivc语言开发的股票软件系统的制作方法