ora2pg를 아래와 같이 사용하여 oracle 서버의 data를 export했습니다.
=> ora2pg -t TABLE -o table.sql //table 껍데기 추출
=> ora2pg -t SEQUENCE -o sequence.sql //시퀀스 추출
=> ora2pg -t COPY -o data.sql //실제 table에 들어갈 data 추출
=> ora2pg -t FUNCTION -o function.sql //함수 추출 (함수 3개 추출됨)
이제 postgres에 추출한 것들을 import시켜주는데,
순서대로 table.sql => sequence.sql => data.sql => function.sql 과정에서
데이터 까지는 잘 들어가는데 function.sql에서 syntax 에러가 나는데 해당 파일 안에 작성되어있는 함수 3개 중 1개에
Start With, Connect by PRIOR 구문으로 작성되어있습니다. 이 구분이 oracle에서만 사용되는 구문이라 syntax 에러가 나는것같습니다.
해당 구문을 postgres에서 사용 가능하게 하는 것이 with recursive 구문이라고 하여 start with~ 으로 작성된 부분을 with recursive구문으로 변경해주어야 할것같은데 SQL구문 초급자라 구글링 해봐도 잘 이해가 가지 않습니다..
구문 올려드릴테니 알려주실분 계시면 감사하겠습니다.
CRAETE OR REPLACE FUNCTION YCCICS.find_level_proc (IN_CYCL text, IN_PROC_CODE text, IN_LEVEL text) RETURNS varchar AS $body$
DECLARE
LEVEL2_PROC_CODE IC_PROCESS_TBL.PROC_CODE%TYPE;
BEGIN
SELECT PROC_CODE
INTO LEVEL2_PROC_CODE
FROM IC_PROCESS_TBL
WHERE PROC_CODE IN (SELECT PROC_CODE
FROM (
SELECT PROC_CODE, LEVEL LV
FROM IC_PROCESS_TBL
START WITH CYCL = IN_CYCL
AND PRNT_PROC_CODE = IN_ROOT_CODE
CONNECT BY PRIOR CYCL = CYCL
AND PRIOR PROC_CODE = PRNT_PROC_CODE
)
WHERE LV = IN_LEVEL )
START WITH CYCL = IN_CYCL
AND LAST_GUBN = 'Y'
AND PROC_CODE = IN_PROC_CODE
CONNECT BY PRIOR PRNT_PROC_CODE = PROC_CODE
AND PRIOR CYCL = CYCL;
RETURN(LEVEL2_PROC_CODE);
EXCEPTION
WHEN OTHERS THEN
RETURN(NULL);
END;
$body$
LANGUAGE PLPGSQL
STABLE;
이상입니다. 구문이 저에겐 많이 복잡한것같습니다..
|