Pl as:用于将OraclePL/SQL转换为Postgresql PL/pgSQL的工具

关于Pl as的问题,在migrate oracle pl sql to postgresql中经常遇到, 是否有一个工具(最好是免费的)将 Oracle 的 PL / SQL 存储过程语言翻译成 Postgresql 的 PL / pgSQL 存储过程语言?

是否有一个工具(最好是免费的)将 Oracle 的 PL / SQL 存储过程语言翻译成 Postgresql 的 PL / pgSQL 存储过程语言?

6

http://ora2pg.darold.net/有一个可用的工具,可用于将 Oracle Schemas 转换为 Postgres 模式,但我不确定它是否也会转换存储过程。

5

还有EnterpriseDB,它具有相当多的 Oracle 兼容性,可以帮助从 Oracle 迁移。具有 Oracle 兼容性的版本不是免费的,但是如果您执行的不仅仅是一个过程转换,则值得一看。

5

已经在 Oracle 到 Postgres 的转换上工作了相当长的一段时间。唯一的方法是手工完成。这两种语言之间有细微的差异,可能会让你绊倒。我们尝试使用自动化工具,但这只会使问题变得更糟,我们最终会输出。

2

使用 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;

本站系公益性非盈利分享网址,本文来自用户投稿,不代表码文网立场,如若转载,请注明出处

(258)
学生成绩查询:SQL-根据年级类型计算加权学生成绩
上一篇
刀的样式:骑士和刀的逻辑命题(knight knives)
下一篇

相关推荐

发表评论

登录 后才能评论

评论列表(70条)