레거시 시스템에서 R/3 DB를 조회할 때,
RFC를 이용하지 않고 DB access를 써서
CBO 테이블의 데이타를 다이렉트로 조회할 수 있다고 합니다.
혹시 이런 방식을 해 보신 분이 계십니까?
설명이나 구현하기 위한 소스코드를 공유해 주시면 감사하겠습니다.
스탠다드 테이블이 되었던 CBO 테이블이 되었던지 간에
R/3 DB를 조회하려면 Function을 이용해야한다고 생각하고 있었는데
그게 아닌것 같네요.
댓글 6
-
SARA
2007.04.05 18:23
-
꼽사리
2007.04.05 19:12
######### DB link #########
sql.net을 깐다
t-code : dbco 에서 db name, db kind, user id, pwd등을 셋팅한다.
<***** 프로그램>
REPORT ZTESTKES001 .
DATA: LV_SHIPMENT(10).
PERFORM CONNECT_LDB CHANGING SY-SUBRC SY-MANDT. "open DB
EXEC SQL.
SELECT SHIPMENT INTO :lv_shipment FROM CARGO_TEMP
ENDEXEC.
WRITE:/ LV_SHIPMENT.
PERFORM DISCONNECT_LDB. "close DB
<1>
FORM CONNECT_LDB CHANGING P_SUBRC P_MANDT.
IF SY-MANDT = P_MANDT.
EXEC sql.
CONNECT TO 'CLXWDB' AS 'con1' "alias 줌
ENDEXEC.
IF SY-SUBRC NE 0.
RAISE CONNECTION_ERROR.
ELSE.
EXEC SQL.
SET CONNECTION 'con1'
ENDEXEC.
IF SY-SUBRC NE 0.
RAISE SET_CONNECTION_ERROR.
ENDIF.
ENDIF.
ENDIF.
ENDFORM. " CONNECT_LDB
<2>
FORM DISCONNECT_LDB.
EXEC SQL.
DISCONNECT 'con1'
ENDEXEC.
ENDFORM. " DISCONNECT_LDB
위와같은 내용이 도움이 될런지.....
-
민성
2007.04.05 22:38
sara 님 답변감사해요
꼽사리님 답변감사합니다. 주신 소스가 레거시에서 DB link 이용하는 방법인가요?
주신 소스가 레거시쪽에서 r/3 db에 접속해서 데이터를 조회하는 로직인가요?
아니면 R/3 쪽에서 동작하기 위한 소스인가요.
DB link의 작동이미지를 잘몰라서 그러는데요,
제가 보기에는 주신 소스가 R/3 쪽 동작을 구현한 소스같은데요,
RFC로 구현하는것과 차이점을 잘 모르겠네요.
-
김대영
2007.04.05 23:18
꼽사리님의 소스는 R/3에서 레거시 DB에 접속해서 데이터 처리하는 코드네욤...
참고로 T_CODE : dtco에서 데이터가 저장되는 테이블은 DBCON입니다.
-
SARA
2007.04.07 20:15
db link에 대해 자세한내용을 아시는 분은 보충을 해주세요 ^^;
source example)
exec sql.
select a.matkl, a.spart, a.prdha, a.volum, a.groes,
b.maktx, c.mtpos, d.bwprh, d.bwph1
into :v_matkl, :v_spart, :v_prdha, :v_volum, :v_groes,
:v_maktx, :v_mtpos, :v_bwprh, :v_bwph1
from mbew@v2tip d, mvke@v2tip c, makt@v2tip b, mara@v2tip a
where a.mandt = '101'
and a.matnr = :v_matnr
and b.mandt = a.mandt
and b.matnr = :v_matnr
and c.mandt = b.mandt
and c.matnr = :v_matnr
and d.mandt = c.mandt
and d.matnr = :v_matnr
endexec.
풀이..
위의 예제같은 경우는 exec sql(여기에 계신분의 말에 의하면 open sql문보다 exec sql문이 performance가 더 낫다고 하더군요)과 join, db-link가 복합적으로 쓰인 예제입니다.
(첨보시는 분들은 좀 난해하리라...)
하여튼 중요한건 타시스템에 있는 DB를 끌고 오는방법인데..
from절에 'DB명@타시스템명'을 써주시면 되구, where절에 타시스템의 mandt를 꼭 써줘야한다는 것입니다.
글구 where절에 조건을 줄때 변수앞에 ':'를 붙여야합니다..
이글을 읽어보시고 source를 다시한번 보시면 이해가 가실려나... ^^;
-
김재진
2007.04.09 17:37
bc 측에서 db link 를 열어주면 간단하게 해결됩니다. 그런데 링크 하나당 퍼포먼스를 많이 잡아 먹어서 잘 안열어 준다고 알고 있습니다.
r/3 db도 오라클이기때문에, 레거시에서 db link를 이용하면 충분히 가능할거같은데요.
기술적인 문제가 아니라 정책적인(보안등) 문제때문에 직접 오라클에 붙어서작업하는것을막고 있다는생각이 듭니다.