我刚刚接管了一个PostgreSQL数据库(版本:PostgreSQL 11.11 on x86_64-pc-linux-gnu,compiled by gcc(GCC)7.3.0,64-bit),该数据库是从Oracle数据库迁移而来的。在该数据库中,我可以运行一些Oracle特定的函数(而不是PostgreSQL中的内置函数)并获得正确的结果,没有任何错误,例如:
select nvl(null, 1);
select decode(1, 1, 'true', 0, 'false');
但是我找不到这些函数,即使我导出了整个模式,没有以下脚本:
select pg_get_functiondef(oid)
from pg_proc
where lower(proname) like '%nvl%';
并且在这个数据库中没有安装任何相关的扩展,如orafce。我如何找到这些函数的定义?x1c 0d1xx 1c 1d 1xx 1c 2d 1xx 1c 3d 1x
1条答案
按热度按时间mlnl4t2r1#
从输出中的列名来看,似乎
NVL
和DECODE
分别被转换为COALESCE
和CASE
。必须在某处定义这些转换。如果没有添加扩展,并且没有函数具有这些名称,则可能是创建PostgreSQL可执行文件的源被修改以执行这些转换。COALESCE
是标准SQL,相当于Oracle的NVL
(Oracle支持两者)。在PostgreSQL中没有与
DECODE
直接等价的;但是,它可以转换为CASE
表达式。请记住,Oracle的DECODE
将两个NULL视为等价。是