是否有一个工具(最好是免费的)将 Oracle 的 PL / SQL 存储过程语言翻译成 Postgresql 的 PL / pgSQL 存储过程语言?
http://ora2pg.darold.net/有一个可用的工具,可用于将 Oracle Schemas 转换为 Postgres 模式,但我不确定它是否也会转换存储过程。
还有EnterpriseDB,它具有相当多的 Oracle 兼容性,可以帮助从 Oracle 迁移。具有 Oracle 兼容性的版本不是免费的,但是如果您执行的不仅仅是一个过程转换,则值得一看。
已经在 Oracle 到 Postgres 的转换上工作了相当长的一段时间。唯一的方法是手工完成。这两种语言之间有细微的差异,可能会让你绊倒。我们尝试使用自动化工具,但这只会使问题变得更糟,我们最终会输出。
使用 ora2pg 转换您的模式。
对于存储过程:
手动将所有 DECODE () 转换为 CASE 语句和所有旧式 Oracle WHERE (+) 外部连接到显式 LEFT OUTER JOIN 语句。我还没有找到一个工具来做到这一点。
翻译 PL / PGSQL 中的 PL / SQL 函数(见下文)。
如果有人启动了一个 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;
本站系公益性非盈利分享网址,本文来自用户投稿,不代表码文网立场,如若转载,请注明出处
评论列表(70条)