oracle에서 작업 만들기 (테이블 공간 크로스)

3212 단어 데이터베이스
수요: 매달 1일 실행되며, TableSpace가 SDE인 몇 장의 표에서 각 프로젝트의 시설 수량을 읽고, TableSpace가SCOTT인 T 에 저장됩니다.DIC_MTTYP
환경: PLSQL
단계:
 
1. 저장 프로세스 설정(TableSpace의 SCOTT 아래)
create or replace procedure scott.PRO_InsertFacility is
begin
  /*   */
  insert into SCOTT.T_MTFACILITY
  select t2.proid,extract(year from sysdate),extract(month from sysdate),1,sscount 
  from (select pjnm,count(pjnm) as sscount from SDE.    group by pjnm) t1 
  inner join SCOTT.T_PROJECTINFO t2 on t1.pjnm=t2.projectname;
  commit;
  
  /*     */
  insert into SCOTT.T_MTFACILITY
  select t2.proid,extract(year from sysdate),extract(month from sysdate),2,sscount 
  from (select pjnm,count(pjnm) as sscount from SDE.      group by pjnm) t1 
  inner join SCOTT.T_PROJECTINFO t2 on t1.pjnm=t2.projectname;
  commit;
  
  /*   */
  insert into SCOTT.T_MTFACILITY
  select t2.proid,extract(year from sysdate),extract(month from sysdate),3,sscount 
  from (select pjnm,count(pjnm) as sscount from SDE.    group by pjnm) t1 
  inner join SCOTT.T_PROJECTINFO t2 on t1.pjnm=t2.projectname;
  commit;

  /*     */
  insert into SCOTT.T_MTFACILITY
  select t2.proid,extract(year from sysdate),extract(month from sysdate),4,sscount 
  from (select pjnm,count(pjnm) as sscount from SDE.      group by pjnm) t1 
  inner join SCOTT.T_PROJECTINFO t2 on t1.pjnm=t2.projectname;
  commit;
  
  /*     */
  insert into SCOTT.T_MTFACILITY
  select t2.proid,extract(year from sysdate),extract(month from sysdate),5,sscount 
  from (select pjnm,count(pjnm) as sscount from SDE.      group by pjnm) t1 
  inner join SCOTT.T_PROJECTINFO t2 on t1.pjnm=t2.projectname;
  commit;
end PRO_InsertFacility;


 
2. 현재 실행 중 오류가 발생했습니다.
Compilation errors for PROCEDURE SCOTT.PRO_INSERTFACILITY
Error: PL/SQL: ORA-00942: 테이블 또는 뷰에 Line: 34 Text: from(select pjnm,count(pjnm) as sscount from SDE가 존재하지 않습니다.오수 저수지 그룹 by pjnm)t1
Error: PL/SQL: SQL Statement ignored Line: 32 Text: insert into SCOTT.T_MTFACILITY
현재 사용자가 SDE 프로젝트에서 오수 저수지표에 접근할 수 있는 select 권한이 없기 때문에 권한을 부여한 후에 저장 프로세스를 다시 실행해야 성공할 수 있습니다.
grant select on SDE.      to scott

3. oracle 작업 만들기
declare JOB_InsertFacility number;  
begin  
       dbms_job.submit(JOB_InsertFacility,'SCOTT.PRO_InsertFacility;',TRUNC(LAST_DAY(SYSDATE))+1,'TRUNC(LAST_DAY(SYSDATE) + 1)');  
       commit;  
end; 

설명: 1) JOBInsertFacility: 이 작업의 작업 대기열 번호
            2)'SCOTT.PRO_InsertFacility;':수행된 작업의 이름 및 입력 매개변수
3) TRUNC(LAST DAY(SYSDATE)+1: 작업 수행 시간
4)'TRUNC(LAST DAY(SYSDATE)+1)': 작업 수행 시간 간격(지난번 실행이 끝나고 다음 실행이 시작되는 시간 간격을 가리키며 interval이null로 설정되면 이 job가 실행된 후 대기열에서 삭제됩니다. 만약에 이 job가 주기적으로 실행되어야 한다면'sysdate+m'로 표시해야 합니다.)
 
4. 질의 작업
select * from sys.user_jobs 

5. 작업 수행
begin  
dbms_job.run(21);  
commit;  
end; 

주의: 21은 조회된 작업 번호입니다
 
6. 작업 중지
begin   
dbms_job.remove(21);  
commit;  
end; 

 
PS: 참조 자료
1. http://www.blogjava.net/pdw2009/archive/2007/02/09/99002.html
2. http://www.cnblogs.com/lumnm/archive/2012/08/31/2666155.html

좋은 웹페이지 즐겨찾기