태터데스크 관리자

도움말
닫기
적용하기   첫페이지 만들기

태터데스크 메시지

저장하였습니다.
독도 광고 모금 캠페인
rss
2008 JAN FEB MAR APR MAY JUN JUL AUG SEP OCT NOV DEC << >>
July 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31

파워빌더로 DB프로그램을 개발할때 많은 프로시져와 함수가 사용된다.
일반적으로 파워빌더에서 오라클의 Procedure나 Fuction을 실행할때 Declare문을 사용한다. 다음 예제는 도움말의 Example이다.

오라클의 spu_edt_object 프로시져를 호출하기 위해서 파워빌더 스크립트에서 DECLARE, FETCH를 이용하는 예제이다.
이렇게 복잡한 방법보다 다음과 같이 한라인으로 호출하도록 설정하는 방법을 알아보자.

SQLCA.spu_edt_object(o_id_object, o_message, a_id_object, a_param, a_value)

파워빌더의 SQLCA라는 변수는 시스템 글로벌변수로 파워빌더에서 DB transaction object로 정의되어 있는 변수이다. 이 변수를 사용자 정의 transaction object로 변경해서, 그 UserObject의 Local External Functions에 함수로 정의 하는 것이다.
우선 New > PB Object > Standard Class를 선택하여 transaction을 상속받은 UserObject를 생성하자.

새로 만든 UserObject를 저장한다. 예제에서는 uo_transaction으로 저장하였다. 그럼 SQLCA를 정의한 곳에서 transaction 대신에 지금 만든 uo_transaction 오브젝트로 재정의 해 준다.
이제 SQLCA를 uo_transaction으로 재정의 해줘야한다. SQLCA가 정의된 곳은 Application 오브젝트에 있다.
Application 페이터를 열고, Properties의 General탭 제일 아래에 보면 "Additional Properties"가 있다. 이 버튼을 클릭하면 Variable Types탭에 SQLCA를 정의하는 부분이 있다. 디폴트로 transaction으로 되어 있는 부분을 새로 만든 transaction 오브젝트인 uo_transaction으로 변경해 준다.
 
이제 기본적인 설정은 끝이 났고, 오라클의 프로시져나 함수를 uo_transaction 오브젝트의 Local External Fuction으로 정의만 하면 된다.
프로시져/함수를 등록하는 Syntax는 외부 DLL함수를 등록하는 방식도 대동소이하다. DLL 등록시 사용되는 Library 키워드 대신에 RPCFUNC라는 키워드가 사용된다. 그리고 프로시져에서 OUT변수는 REF키워드를 사용하여 정의하면 된다.

FUNCTION rtndatatype functionname ( { { REF } datatype1 arg1, ...,    { REF } datatypen argn } ) 
RPCFUNC { ALIAS FOR "spname" }
SUBROUTINE functionname ( { { REF } datatype1 arg1 , ...,    { REF } datatypen argn } ) 
RPCFUNC { ALIAS FOR "spname" }

procedure는 SUBROUTINE으로 등록하면 된다.
그럼 위 예제의 프로시져는 다음과 같이 등록하면 될것이다.

SUBROUTINE spu_edt_object(REF long o_id_object, REF string o_message, long a_id_object, string a_param, string a_value) RPCFUNC ALIAS FOR "spu_edt_object"

이렇게 정의해둔 프로시져나 함수는 SQLCA.<함수명>({변수}) 와 같은 식으로 한라인으로 처리가 가능하다.
알고 나면 쉽지만... 모르면 Example의 예처럼 많은 삽질을 해야한다. ^^;



다음 내용은 과거 Oracle Technical Bulletin (링크된 주소는 새롭게 바뀐 Technical Bulletin사이트)에 올라왔던 글을 스크랩 해두었던 내용이다. 지금은 새롭게 사이트가 개편되어서 인지 과거 데이터를 찾아 볼수가 없었다.
오라클 DB에 Lock현상을 체크하는 쿼리이다.
더불어 Jasu님의 '웹페이지에 코드를 이쁘게 보여주는 AScodeViewer'도 같이 테스트해 보았다. 나름대로 만들어본 오라클 SQL파일(*.sql)용 format xml파일을 적용해 보실려면 아래 첨부파일을 받아서 사용하시길 바랍니다.


[No. 11811] DB 전체의 TX, TM LOCK 현상 확인 SCRIPT

database 전체에 대해서 user table에 관계된 lock만을 확인하는 script를 기존 catblock.sql을 변형하여 작성하였다.
기존의 catblock.sql이 해당 lock을 waiting하는 session이 있을 때에만 결과가 나타나, 실제 waiting이 없는 경우 현재 lock 상태를 보지 못하였던 점과, 각 lock 상태에 대해서 바로 해당 object를 함께 display하도록 수정하였다.

[NOTE 1] sys user에서 수행하여야 하며 system 등 다른 dba 권한을 가진 user에서 수행하고자 한다면 다음과 같이 sys user에서 grant를 주어야 한다.

         SQL>grant select on v_$lock to system;

[NOTE 2] 전체 lock현황이 아니고 waiting이 발생하는 경우만을 보여주고자 한다면 첫번째 문장의 where절에 request !=0 를 첨가한다. 다음과 같이 된다.

         WHERE request !=0 AND type = 'TX' OR type = 'TM';

출처: http://211.106.111.2:8880/bulletin/list.jsp (과거 Oracle Technical Bulletin)