문제

Oracle의 PL/SQL 저장 절차 언어를 PostgreSQL의 PL/PGSQL 저장 프로 시저로 변환하는 도구 (바람직하게는 무료)가 있습니까?

도움이 되었습니까?

해결책

이용 가능한 도구가 있습니다 http://ora2pg.darold.net/ 이것은 Oracle Schemas를 Postgres Schemas로 트랜스 컬레이션하는 데 사용될 수 있지만 저장된 절차를 번역 할 것인지 확실하지 않습니다. 그러나 그것은 시작할 장소를 제공 할 수 있습니다.

다른 팁

꽤 오랫동안 Oracle에서 Postgres 변환을 위해 노력하고 있습니다. 그것을 할 수있는 유일한 방법은 손입니다. 두 언어 사이에는 미묘한 차이가 있습니다. 우리는 자동화 된 도구를 사용하려고 시도했지만 문제가 악화되었고 결국 출력을 버렸습니다.

또한 있습니다 Enterprisedb Oracle에서 마이그레이션을 도울 수있는 약간의 Oracle 호환성이 있습니다. Oracle 호환성이있는 버전은 무료가 아니지만 하나의 프로 시저 번역 이상을 수행하는 경우 살펴볼 가치가 있습니다.

ORA2PG를 사용하여 스키마를 번역하십시오.

저장 절차 :

  1. 모든 decode () ()을 수동으로 케이스 문과 모든 구식 Oracle으로 변환합니다. (+) 외부가 명시 적 왼쪽 외부 조인 명령문에 조인하는 모든 구식 Oracle. 나는 이것을 할 도구를 찾지 못했습니다.
  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;
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top