3

'stored_procedure'유형의 dbms_scheduler 작업에 명명 된 인수를 전달할 수 있습니까? 나는 성공적으로 argument_position 설정을 사용하여 set_job_argument_value와 매개 변수 값을 설정Oracle dbms_scheduler 작업 저장 프로 시저에 대한 명명 된 매개 변수 설정

-27484: Argument names are not supported for jobs without a program. ORA-06512: at "SYS.DBMS_ISCHED", line 207 ORA-06512: at "SYS.DBMS_SCHEDULER", line 602 ORA-06512: at line 2

ORA :

-- 1) example dummy procdure 
CREATE OR REPLACE PROCEDURE my_test_proc (
param1 IN NVARCHAR2, 
param2 IN NUMBER, 
param3 IN NUMBER 
) IS 
BEGIN 
-- ... 
END; 

-- 2)Example dummy job: 
BEGIN  
    dbms_scheduler.create_job(
     job_name => 'my_test_job' 
     ,job_type => 'STORED_PROCEDURE' 
     ,job_action => 'my_test_proc' 
     ,start_date => sysdate 
     ,number_of_arguments => 3 
     ,enabled => FALSE 
     ,auto_drop =>FALSE 
    ); 
END; 
-- 3)Set named param value: 
BEGIN 
    dbms_scheduler.set_job_argument_value(
     job_name => 'my_test_job' 
     ,argument_name => 'param1' 
     ,argument_value => 'some value' 
    ); 
END; 

것은 내가 오류 다음 얻을 :이 방법을 시도했습니다. 그러나 특정 매개 변수 만 설정해야하는 저장 프로 시저를 실행해야하는 경우가있을 수 있으며 작동하지 않을 수 있습니다. 명명 된 인수를 스케줄러 작업에 의해 실행되는 저장 프로 시저에 전달하는 방법이 있습니까?

+0

가능한 중복 (http://stackoverflow.com/questions/9179775/passing-arguments-to-oracle-stored-procedure-through-scheduler-job) – Vadzim

답변

4

오류 상태로 먼저 프로그램을 작성한 다음 해당 작업을 작성하십시오. [스케줄러 작업을 통해 Oracle 저장 프로 시저에 인수 전달]의

dbms_scheduler.create_program(program_name  => 'YOUR_PROGRAM', 
           program_type  => 'STORED_PROCEDURE',               
           program_action  => 'my_test_proc', 
           number_of_arguments => 2, 
           enabled    => false, 
           comments   => 'Comments you want'); 

dbms_scheduler.define_program_argument(program_name  => 'YOUR_PROGRAM', 
             argument_name  => 'param1', 
             argument_position => 1, 
             argument_type  => 'VARCHAR2', 
             default_value  => ''); 
    ..etc, do for all 3.           

dbms_scheduler.enable (name => 'YOUR_PROGRAM'); 


dbms_scheduler.create_job(job_name  => 'my_test_job', 
          program_name => 'YOUR_PROGRAM', 
          start_date  => systimestamp, 
          end_date  => null, 
          ... 

dbms_scheduler.set_job_argument_value(job_name   => 'my_test_job', 
             argument_position => 1, 
             argument_value => 'value'); 
    ... 
+0

제공 한 팁에 따라 테스트 예제를 만들었습니다. 그러나 나는 stored_procedure에 이름 지정된 인수를 설정하는 방법을 여전히 파악할 수 없습니다. define_program_argument만큼 argument_position은 문서에 따라 전달 될 수 있습니다. 이 방법으로 성취 할 수 없다고 생각하기 시작했으며 SP 호출을 위해 동적 문자열을 만들어야합니까? – skujins

+1

@Skuja [define PROGRAM argument] (http://docs.oracle.com/cd/B19306_01/appdev.102/b14258/d_sched.htm#i1011161)는 인수 이름을 취합니다 (실제로 매개 변수의 이름은 아니지만 be) + 실제 위치. define JOB 인수는 위치 (또는 원하는 경우 두 개의 오버로드 된 API가있는 이름) 만 가져오고 이는 프로그램 인수 position/name에 다시 연결해야합니다. – DazzaL