是否有工具(最好是免费的)将Oracle的PL / SQL存储过程语言转换为Postgresql的PL / pgSQL存储过程语言?
答案 0 :(得分:5)
http://ora2pg.darold.net/有一个工具可用于将Oracle Schema转换为Postgres模式,但我不确定它是否也会转换存储过程。 但它可能提供一个起点。
答案 1 :(得分:3)
在相当一段时间内一直致力于Oracle到Postgres的转换。唯一的方法是手工完成。这两种语言之间存在微妙的差异,可能会让您失望。我们尝试使用自动化工具,但它只会使问题变得更糟,我们最终破坏了输出。
答案 2 :(得分:2)
还有EnterpriseDB,它具有相当多的Oracle兼容性,可帮助从Oracle迁移。具有Oracle兼容性的版本不是免费的,但如果您只做一个以上的过程转换,那么值得一看。
答案 3 :(得分:2)
使用ora2pg翻译您的架构。
对于存储过程:
如果有人启动了sourceforge项目,那将是非常好的 暗示提示......
以上是我对上述(2)的意思:
CREATE OR REPLACE FUNCTION trunc(
parmDate DATE ,
parmFormat VARCHAR )
RETURNS date
AS $$
DECLARE
varPlSqlFormat VARCHAR;
varPgSqlFormat VARCHAR;
BEGIN
varPgSqlFormat := lower(parmFormat);
IF varPgSqlFormat IN (
'syyyy' ,
'yyyy' ,
'year' ,
'syear' ,
'yyy' ,
'yy' ,
'y' ) THEN
varPgSqlFormat := 'year';
ELSEIF varPgSqlFormat IN (
'month' ,
'mon' ,
'mm' ,
'rm' ) THEN
varPgSqlFormat := 'month';
ELSEIF varPgSqlFormat IN (
'ddd' ,
'dd' ,
'j' ) THEN
varPgSqlFormat := 'day';
END IF;
RETURN DATE_TRUNC(varPgSqlFormat,parmDate);
END;
$$ LANGUAGE plpgsql;
CREATE OR REPLACE FUNCTION trunc(
parmDate DATE)
RETURNS date
AS $$
DECLARE
BEGIN
RETURN DATE_TRUNC('day',parmDate);
END;
$$ LANGUAGE plpgsql;
CREATE OR REPLACE FUNCTION last_day(in_date date) RETURNS date
AS $$
DECLARE
BEGIN
RETURN CAST(DATE_TRUNC('month', in_date) + '1 month'::INTERVAL AS DATE) - 1;
END;
$$ LANGUAGE plpgsql;