상세 컨텐츠

본문 제목

[Oracle] 프로시저로 테이블 삭제 후 등록

Development/Oracle

by J-Developer 2021. 1. 2. 17:29

본문

반응형

프로시저로 테이블을 매일 밤 마다 초기화 시키는 작업이 필요했다.

그리고 해당 프로시저를 잡으로 등록까지 해줘야 했다.

프로시저를 직접 생성하는 경험이 없어서, 검색을 하면서 작업을 진행했다.

 

 

create or replace PROCEDURE CR_IPM_HRM_INFO AS
    SQL_STR VARCHAR2(4000);  
BEGIN
  
    SQL_STR := 'DROP TABLE TMP_IPM_HRM_INFO';
    EXECUTE IMMEDIATE SQL_STR;
    
    SQL_STR := 'CREATE TABLE TMP_IPM_HRM_INFO AS
    SELECT * FROM TB_IPM_HRM_INFO';
    EXECUTE IMMEDIATE SQL_STR;
      
END CR_IPM_HRM_INFO;

 

해당 프로시저를 작성 후 실행을 해보면 계속 권한이 필요합니다 라는 에러가 발생하더라

그래서 찾아보니 EXECUTE에 대한 권한이 필요하다고 하여 모든 사용자가 해당 프로시저를 실행 할 수 있도록

주었다.

 

GRANT EXECUTE ON CR_IPM_HRM_INFO TO PUBLIC;

 

하지만 이 권한을 주어도 같은 에러가 계속 발생하더라.

아무래도 다른 권한이 필요한가 싶어서 더 찾아보았다. Create 권한을 주면 된다는 정보를 찾았는데 해당 권한으로 계속 테이블을 생성하고 있었는데 Create 권한이 필요한건가? 의문이 들었지만 혹시 몰라 권한을 줬다.

 

GRANT CREATE TABLE TO 계정명;

 

Create 권한을 주니 정말 실행이 잘 되더라...

 

해당 프로시저를 생성 후 잡을 등록하려고 또 이런 저런 시도를 해봤다.

잡도 등록해본 경험이 없어서 여러가지 글을 읽고 약간의 이해를 통해 생성을 하였다.

 

DECLARE X NUMBER;
BEGIN SYS.DBMS_JOB.SUBMIT (
    JOB => X ,
    WHAT => 'CR_IPM_HRM_INFO' ,
    NEXT_DATE => to_date('03-01-2021 00:00:00','dd/mm/yyyy hh24:mi:ss') ,
    INTERVAL => TRUNC(SYSDATE+1)+1/24 ,
    NO_PARSE => TRUE
);
END;

 

매일 밤 1시마다 실행되는 잡이다.

 

나중에 또 언제 필요할지 몰라 기록을 해놓는다.

반응형

댓글 영역