8

Oracle の PL/SQL ストアド プロシージャ言語を Postgresql の PL/pgSQL ストアド プロシージャ言語に変換するツール (できれば無料) はありますか?

4

4 に答える 4

6

Oracle スキーマを Postgres スキーマに変換するために使用できるツールがhttp://ora2pg.darold.net/にありますが、ストアド プロシージャも変換するかどうかはわかりません。しかし、それは出発点を提供するかもしれません。

于 2008-10-01T15:58:36.717 に答える
5

かなり長い間、Oracle から Postgres への変換に取り組んできました。それを行う唯一の方法は手作業です。2 つの言語には、つまずく可能性のある微妙な違いがあります。自動化されたツールを使用してみましたが、問題が悪化するだけで、最終的に出力を破棄することになりました。

于 2010-10-25T16:43:19.680 に答える
5

Oracle からの移行を支援するためにかなりの Oracle 互換性を持つEnterpriseDBもあります。Oracle 互換のバージョンは無料ではありませんが、複数のプロシージャー変換を行う場合は一見の価値があります。

于 2008-10-01T16:07:45.963 に答える
2

ora2pg を使用してスキーマを変換します。

ストアド プロシージャの場合:

  1. すべての DECODE() を CASE ステートメントに、すべての古いスタイルの Oracle WHERE (+) 外部結合を明示的な LEFT OUTER JOIN ステートメントに手動で変換します。これを行うためのツールが見つかりませんでした。
  2. 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;
于 2010-10-27T21:06:42.207 に答える