Q&A

  • SQL 구문을 이용하여 오라클 테이블 LOCK 거는 방법좀 알려주세요

DB 오라클을 사용하고 있읍니다.
특정 작업을 시작할때  다른 프로세스가 같은 테이블에 Insert, Update를 하지 못하게
Read Only 또는 Lock 을 걸고자 합니다.
그리고 작업이 완료시 다시 Lock 울 해제 하는 방법좀 알려주세여...
<소스 참조>
상태 테이블를 만들어 코딩을 했지만, 반송 마감(pas_Bartodata)
쪽에서 시간이 오래 지연되는 경우가 있기에 파일생성(pas_file)쪽에만
Lock을 걸어 코딩해야  할것 같습니다.
답변 부탁 드립니다.
제 질문이 알아 듣기 힘드실거 같아 소스 첨가 합니다 ^^


4  COMMENTS
  • Profile
    착한천사 2004.08.30 02:07
    사용자 lock일 경우에는 2가지 방법이 있습니다..

    1.   lock table 구문 - table 기준 lock

         syntax:  lock table 테이블명 in exclusive mode

         예) lock table emp in exclusive mode;


    2.  select .. for update 구문 - row기준 lock

        예) select  * from emp
             where deptno = 20
             for update;

      emp 테이블의 deptno = 20인 row에 대해서만 lock이 걸리게 된다.


    이 모든 lock은 commit 또는 rollback이 되는 순간 풀리게 됩니다..
    단, 다른 유저의 insert/update/delete를 막는다고는 하지만,
    여전히 select는  여전히 가능합니다..

    ps.
    요즘 델파이 동호회에서 oracle이 심심찮게 나오네요..
    반가운 현상이겠죠???  *^^*


  • Profile
    김용진 2004.08.31 03:53
    이런 방법이 있었군요... 답변 감사합니다.
    그런데 저는  이를 델파이에서 구현하려 하는데요
    말씀하신 명령들이 쿼리상에서도 가능한지 모르겠네요
    execsql 하면 commit 두 되는걸루 알고 있는데....
    조금더 구체적으로 설명해 주시면 고맙겠습니다
    약간의 코딩이 있으면 더 좋겠구요^^
    그럼 연락 기다리겠습니다.

  • Profile
    nilriri™ 2004.08.31 08:16
    쿼리컴포넌트가 사용하는 커넥션의 프로시져중에 beginTransaction 이란게ㅔ 있을 겁니다..



    BeginTransaction, CommitTransaction, RollBackTransaction  

    잘 기억이 나진ㄴ 않지만..비슷한..

    Transaction으로 검색해보세요..^^

    그럼.


  • Profile
    김용진 2004.09.01 03:08
    컴포넌트 처리...
    암튼 좋은 의견 감사합니다.
    앞으로 귀하에 무궁한 발전이 있으시길^^