database.sarang.net
UserID
Passwd
Database
DBMS
MySQL
ㆍPostgreSQL
Firebird
Oracle
Informix
Sybase
MS-SQL
DB2
Cache
CUBRID
LDAP
ALTIBASE
Tibero
DB 문서들
스터디
Community
공지사항
자유게시판
구인|구직
DSN 갤러리
도움주신분들
Admin
운영게시판
최근게시물
PostgreSQL Q&A 9827 게시물 읽기
No. 9827
Ora2pg를 이용한 Oracle -> PostgreSQL 이관시 질문
작성자
postgres
작성일
2017-05-23 16:38
조회수
9,294

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;

 

 

이상입니다. 구문이 저에겐 많이 복잡한것같습니다..

 

 

 

 

이 글에 대한 댓글이 총 2건 있습니다.

with recursive로 바꾸는게 맞으며 직접해보시는것이 좋습니다.

 

https://www.postgresql.org/docs/current/static/queries-with.html

 

문법 참고하면서 이해하시면 하실수 있습니다.

김주왕(kimjuking)님이 2017-05-23 16:50에 작성한 댓글입니다.

추가적으로 설명드리면 recursive절의 union all의 윗부분은 start with 부분에 대한 내용이며

 

그 밑에는 connect by의 내용으로 구성하시면 됩니다.

김주왕(kimjuking)님이 2017-05-23 16:51에 작성한 댓글입니다.
[Top]
No.
제목
작성자
작성일
조회
9833postgre 언어셋 관련 [2]
postgres
2017-05-30
7963
9832postgreSQL 함수 관련 질문 [5]
postgres
2017-05-26
7903
9831WITH RECURSIVE 구문 PATH, ARRAY 추가 [6]
postgres
2017-05-25
10701
9827Ora2pg를 이용한 Oracle -> PostgreSQL 이관시 질문 [2]
postgres
2017-05-23
9294
9823PostgreSQL 10 베타 1 나옴. [1]
전상도
2017-05-19
7424
9822ora2pg 사용법 [3]
postgres
2017-05-18
8366
98219.6.3 released
전상도
2017-05-18
6891
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.018초, 이곳 서비스는
	PostgreSQL v16.2로 자료를 관리합니다