PostgreSQL 内核自带的Oracle兼容函数

标签

PostgreSQL , Oracle , 兼容函数 , Oracle compatible functions


背景

PostgreSQL功能上基本可以和Oracle对齐,只是一些语法或者函数名不一样,所以为了做到兼容,有一些兼容包和兼容函数的出现。

PostgreSQL自带了一些Oracle兼容函数,如果你觉得不够意思,可以通过orafce插件继续扩展PostgreSQL与Oracle的兼容性(本文不涉及orafce包)。

http://pgxn.org/dist/orafce/

http://api.pgxn.org/src/orafce/orafce-3.3.0/README.asciidoc

PostgreSQL自带的Oracle兼容函数

在源码src/backend/utils/adt/oracle_compat.c中可以找到它们的定义

/*-------------------------------------------------------------------------
 * oracle_compat.c
 *      Oracle compatible functions.
 *
 * Copyright (c) 1996-2016, PostgreSQL Global Development Group
 *
 *      Author: Edmund Mergl <E.Mergl@bawue.de>
 *      Multibyte enhancement: Tatsuo Ishii <ishii@postgresql.org>
 *
 *
 * IDENTIFICATION
 *      src/backend/utils/adt/oracle_compat.c
 *
 *-------------------------------------------------------------------------
 */
/********************************************************************
 *
 * lower
 *
 * Syntax:
 *
 *       text lower(text string)
 *
 * Purpose:
 *
 *       Returns string, with all letters forced to lowercase.
 *
 ********************************************************************/
/********************************************************************
 *
 * upper
 *
 * Syntax:
 *
 *       text upper(text string)
 *
 * Purpose:
 *
 *       Returns string, with all letters forced to uppercase.
 *
 ********************************************************************/
/********************************************************************
 *
 * initcap
 *
 * Syntax:
 *
 *       text initcap(text string)
 *
 * Purpose:
 *
 *       Returns string, with first letter of each word in uppercase, all
 *       other letters in lowercase. A word is defined as a sequence of
 *       alphanumeric characters, delimited by non-alphanumeric
 *       characters.
 *
 ********************************************************************/
/********************************************************************
 *
 * lpad
 *
 * Syntax:
 *
 *       text lpad(text string1, int4 len, text string2)
 *
 * Purpose:
 *
 *       Returns string1, left-padded to length len with the sequence of
 *       characters in string2.  If len is less than the length of string1,
 *       instead truncate (on the right) to len.
 *
 ********************************************************************/
/********************************************************************
 *
 * rpad
 *
 * Syntax:
 *
 *       text rpad(text string1, int4 len, text string2)
 *
 * Purpose:
 *
 *       Returns string1, right-padded to length len with the sequence of
 *       characters in string2.  If len is less than the length of string1,
 *       instead truncate (on the right) to len.
 *
 ********************************************************************/
/********************************************************************
 *
 * btrim
 *
 * Syntax:
 *
 *       text btrim(text string, text set)
 *
 * Purpose:
 *
 *       Returns string with characters removed from the front and back
 *       up to the first character not in set.
 *
 ********************************************************************/
/********************************************************************
 *
 * btrim1 --- btrim with set fixed as ' '
 *
 ********************************************************************/
/********************************************************************
 *
 * byteatrim
 *
 * Syntax:
 *
 *       bytea byteatrim(byta string, bytea set)
 *
 * Purpose:
 *
 *       Returns string with characters removed from the front and back
 *       up to the first character not in set.
 *
 * Cloned from btrim and modified as required.
 ********************************************************************/
/********************************************************************
 *
 * ltrim
 *
 * Syntax:
 *
 *       text ltrim(text string, text set)
 *
 * Purpose:
 *
 *       Returns string with initial characters removed up to the first
 *       character not in set.
 *
 ********************************************************************/
/********************************************************************
 *
 * ltrim1 --- ltrim with set fixed as ' '
 *
 ********************************************************************/
/********************************************************************
 *
 * rtrim
 *
 * Syntax:
 *
 *       text rtrim(text string, text set)
 *
 * Purpose:
 *
 *       Returns string with final characters removed after the last
 *       character not in set.
 *
 ********************************************************************/
/********************************************************************
 *
 * rtrim1 --- rtrim with set fixed as ' '
 *
 ********************************************************************/
/********************************************************************
 *
 * translate
 *
 * Syntax:
 *
 *       text translate(text string, text from, text to)
 *
 * Purpose:
 *
 *       Returns string after replacing all occurrences of characters in from
 *       with the corresponding character in to.  If from is longer than to,
 *       occurrences of the extra characters in from are deleted.
 *       Improved by Edwin Ramirez <ramirez@doc.mssm.edu>.
 *
 ********************************************************************/
/********************************************************************
 *
 * ascii
 *
 * Syntax:
 *
 *       int ascii(text string)
 *
 * Purpose:
 *
 *       Returns the decimal representation of the first character from
 *       string.
 *       If the string is empty we return 0.
 *       If the database encoding is UTF8, we return the Unicode codepoint.
 *       If the database encoding is any other multi-byte encoding, we
 *       return the value of the first byte if it is an ASCII character
 *       (range 1 .. 127), or raise an error.
 *       For all other encodings we return the value of the first byte,
 *       (range 1..255).
 *
 ********************************************************************/
/********************************************************************
 *
 * chr
 *
 * Syntax:
 *
 *       text chr(int val)
 *
 * Purpose:
 *
 *      Returns the character having the binary equivalent to val.
 *
 * For UTF8 we treat the argumwent as a Unicode code point.
 * For other multi-byte encodings we raise an error for arguments
 * outside the strict ASCII range (1..127).
 *
 * It's important that we don't ever return a value that is not valid
 * in the database encoding, so that this doesn't become a way for
 * invalid data to enter the database.
 *
 ********************************************************************/
/********************************************************************
 *
 * repeat
 *
 * Syntax:
 *
 *       text repeat(text string, int val)
 *
 * Purpose:
 *
 *      Repeat string by val.
 *
 ********************************************************************/

参考

src/backend/utils/adt/oracle_compat.c

http://pgxn.org/dist/orafce/

http://api.pgxn.org/src/orafce/orafce-3.3.0/README.asciidoc

时间: 2024-09-23 16:45:43

PostgreSQL 内核自带的Oracle兼容函数的相关文章

找对业务G点, 体验酸爽 - PostgreSQL内核扩展指南

通用数据库就像带装修的房子一样,如果按数据库的功能划分,可以分为豪华装修.精装.简装. PostgreSQL从SQL兼容性.功能.性能.稳定性等方面综合评价的话,绝对算得上豪华装修级别的,用户拎包入住就可以. 不过通用的毕竟是通用的,如果G点不对的话,再豪华的装修你也爽不起来,这是很多通用数据库的弊病,但是今天PostgreSQL数据库会彻底颠覆你对通用数据库的看法. 基于PostgreSQL打造最好用的私人订制数据库 花了2个通宵,写了一份PostgreSQL内核扩展指南,时间有限,内容以入门

oracle常用函数

一般的to_char是这样用的to_char(sysdate,'YYYY-MM-DD hh:mi:ss AM') ,也有几个图书点的用法 to_char(sysdate, 'dd') 查看今天是几号 to_char(sysdate, 'ww') 查看这是这个月第几个星期 to_char(sysdate, 'mm') 查看这是一年中第几个月 to_char(sysdate, 'yyyy') 查看年份 last_day(to_date('2007-02-01','YYYY-MM-DD'))查看一个月

PostgreSQL教程(十九):SQL语言函数_PostgreSQL

一.基本概念:     SQL函数可以包含任意数量的查询,但是函数只返回最后一个查询(必须是SELECT)的结果.在简单情况下,返回最后一条查询结果的第一行.如果最后一个查询不返回任何行,那么该函数将返回NULL值.如果需要该函数返回最后一条SELECT语句的所有行,可以将函数的返回值定义为集合,即SETOF sometype.     SQL函数的函数体应该是用分号分隔的SQL语句列表,其中最后一条语句之后的分号是可选的.除非函数声明为返回void,否则最后一条语句必须是SELECT.事实上,

头文件-请问ubuntu内有自带的单向hash函数吗?

问题描述 请问ubuntu内有自带的单向hash函数吗? 就是把一个大文件快速hash成一个小文件,有这样的函数吗?头文件在那个目录里呢? 解决方案 这和ubuntu没有什么关系. google下md5 sha1 sha256 rc4等等各种散列的函数有很多. 解决方案二: ubuntu自带有md5sum等命令 解决方案三: 参考:http://blog.csdn.net/xhhjin/article/details/8450686

Oracle Decode()函数和CASE语句的比较

      Oracle Decode()函数和CASE语句都是我们经常用到的,那么它们的区别在哪里呢?下面就为您详细介绍             Oracle Decode()函数和CASE语句的区别,供您参考. 首先,举2个简单的例子,简单对比一下这2者的区别. 1.CASE语句: 以下是代码片段: SELECT CASE SIGN(5 - 5) WHEN 1 THEN 'Is Positive' WHEN -1 THEN 'Is Negative' ELSE 'Is Zero' END F

oracle中函数和存储过程简单示例-动态sql

oracle中函数和存储过程 1. 函数 create or replace function getArtCount(keyword in varchar2) return number as   Result number;    Sqlt varchar2(4000); begin    -- select t.sys_documentid into Result from dom_2_doclib t where t.sys_topic like '%key%';        -- s

Oracle正则表达式函数:regexp_like、regexp_substr、regexp_instr、regexp_replace

Oracle使用正则表达式离不开这4个函数:1.regexp_like2.regexp_substr3.regexp_instr4.regexp_replace 看函数名称大概就能猜到有什么用了.regexp_like 只能用于条件表达式,和 like 类似,但是使用的正则表达式进行匹配,语法很简单: regexp_substr 函数,和 substr 类似,用于拾取合符正则表达式描述的字符子串,语法如下: regexp_instr 函数,和 instr 类似,用于标定符合正则表达式的字符子串的

PostgreSQL 9.5.0 PK Oracle 12.0.1.2.0 TPC-C性能极限

Oracle 12c TPC-C 测试请参考: http://blog.163.com/digoal@126/blog/static/1638770402015112344924835/ 文件系统为XFS,优化手段如下: http://blog.163.com/digoal@126/blog/static/16387704020160695427218/ 本文在同样的硬件测试环境下对比PostgreSQL 9.5.0. 我们看看1月7号发布的PostgreSQL 新版本性能咋样? benchma

java-关于mysql和oracle兼容的问题

问题描述 关于mysql和oracle兼容的问题 java中获取当前时间作为查询条件 有没有办法做到mysql 和oracle兼容? 解决方案 Mysql和oracle的分页问题MySQL与Oracle的大小写问题DBDesigner与MySQL5兼容问题 解决方案二: mysql和oracle获取当前时间方法不一样,你只能在java中取当前时间当查询条件了 解决方案三: 没有好的解决办法就想办法再Java后台拿到当前操作的数据库的类型,再去做一个分支吧.我想你既然做了多数据源,必然拿到当前操作