2017-12-19 15 views
0

CX_ORACLE 패키지를 사용하여 파이썬 모듈에서 연결하는 Oracle 데이터베이스가 있습니다.
동기화 호출을하는 동안이 작동합니다.하지만 오라클에 저장된 proc 너무 많은 시간이 걸리고 오라클 시간 초과 걸릴 수 있습니다이 비동기 만들 수있는 방법을 찾으려고 노력했습니다.Oracle 데이터베이스에서 Stored Proc를 비동기 적으로 트리거 할 수 있습니까?

내 파이썬 모듈에서 내 저장 프로 시저를 트리거하고 저장된 프로 시저의 인스턴스를 종료하지 않고 연결을 닫을 수있는 방법이 있습니까?

답변

3

부탁하는 방식으로 - 아니요. 연결을 끊으면 oracle이 세션을 종료합니다 (또는 적어도 죽이려고합니다). 그러나 직업을 창출 할 수 있습니다. Job은 oracle 인스턴스가 관리하는 객체입니다. 그것은 실행하는 데 사용되는 일정이 있습니다. 한 번만 start_date, repeat_intervalend_date 널 떠나 프로 시저를 실행하려면

begin 
    dbms_scheduler.create_job(
     job_name   => 'My job', 
     job_type   => 'STORED_PROCEDURE', 
     job_action   => 'YOUR_SCHEMA.YOUR_PACKAGE.YOUR_PROCEDURE', 
     start_date   => 'desired date to start', 
     repeat_interval => 'FREQ=DAILY;INTERVAL=1', /* every day */ 
     end_date   => 'desired date to stop', 
     comments   => 'I will run it from python'); 
end; 

: 간단한 예를 한 번 저장 프로 시저를 실행하는 작업을 만들

begin 
    dbms_scheduler.create_job(
     job_name   => 'My job', 
     job_type   => 'STORED_PROCEDURE', 
     job_action   => 'YOUR_SCHEMA.YOUR_PACKAGE.YOUR_PROCEDURE', 
     comments   => 'I will run it from python'); 
end; 

오라클 스케줄러는 매우 복잡하고 강력한 도구. 매개 변수, 익명 블록, 복잡한 스케줄 작성 등으로 프로 시저를 실행할 수 있습니다. 자세한 내용은 Scheduler, DBMS_SCHEDULER 설명서를 참조하십시오.

+0

답장을 보내 주셔서 감사합니다. @Dmitry. 그러나 파이썬 코드에 값을 반환하려면 저장 프로 시저가 필요했습니다. 나는이 경우에 가능하지 않다고 가정하고 있습니까? –

+0

@SakshamArora 직접 - 아니요. 그러나 리턴 값을 테이블에 저장할 수 있습니다. 스크립트를 실행하고 식별자를 전달한 다음 (다른 프로 시저 실행을 식별해야하는 경우) 프로 시저를 실행합니다. 프로 시저에 식별자를 사용하여 결과를 저장하는 코드를 추가 한 다음 선택을하십시오. – Dmitry