프로시저 for문 insert질문 0 4 1,349

by 개발고수가되기를 [2018.05.27 16:36:54]


아래 내용을 작성하였습니다.
for c1으로 조회 해서 c1에 값을 담궈 놓은 후 c1.fg_use = '0' 0 값이면 이 값을  INSERT INTO T_TMM_161에 insert 하려고 합니다.
근데 for loop를 돌렸음에도 불구하고 1건씩만 들어가네요
로그를 찍어봐도 루프는 잘 돌아서 찍히는데 실제 테이블에는 인서트가 되어 있지가 않네요
간단하고 생각하고 토요일부터 처리를 해보려고 노력했으나 원인를 모르겠어서 질문 드립니다!

 

CREATE OR REPLACE PROCEDURE dddd.SP_TMM_162   

as
user_exp  exception;
user_skp  exception;
v_vc_emsg T_SYS_900.vc_emsg%type;
v_nm_pgm  varchar2(100) := '111';
v_id_job  T_SYS_900.id_job%type := 'SP_TMM_162';

begin

 -- 작업이력 START
  sp_sys_900 (sysdate, v_id_job, '00', 'S', 0, 'I', null);

begin
 --휴일주차매장 조회
  for c1 in (  select dy_sale,
                        cd_venr,
                        no_user,
                        dc_key_cd,
                        (select nvl(c.nm_body,'') from t_com_011 c where c.cd_head = 'PKT120' and c.cd_body = dc_key_cd )  as nm_dc_key,
                        fg_use
                 from t_tmm_162
                where dy_sale =to_char(sysdate,'yyyymmdd')
             ) LOOP

 if c1.fg_use = '0' THEN
                   
          DELETE FROM T_TMM_161
          WHERE CD_VENR = c1.cd_venr ;

   dbms_output.put_line(' 결과 c1dc_key_cd >>>['|| c1.dc_key_cd ||']');
   dbms_output.put_line(' 결과 nm_dc_key >>>['|| c1.nm_dc_key ||']');
   dbms_output.put_line(' 결과 no_user >>>['|| c1.no_user ||']');
   dbms_output.put_line(' 결과 cd_venr >>>['|| c1.cd_venr ||']');                        

          INSERT INTO T_TMM_161
          VALUES
          (c1.cd_venr, c1.no_user, c1.dc_key_cd, c1.nm_dc_key, '0000000102', SYSDATE, '0000000102', SYSDATE);
 
  end if;    
 end loop;
     
END;

COMMIT;

 

by 개발고수가되기를 [2018.05.27 16:40:24]

마지막에 END; 가 빠졌네요~


by 마농 [2018.05.28 08:40:10]

올려주신 부분만 보면 컴파일 에러입니다.
전체를 다 올려주신게 아닌 듯 하네요.
지우고 입력하는 과정을 반복하는데.
지울때 사용하는 조건이 키가 아닌 듯 하네요?
이전에 입력한 걸 계속 지워서 마지막 한건만 남는게 아닐까요?


by 개발고수가되기를 [2018.05.28 09:11:56]

아 마농님 감사합니다 질문에서 답을 얻었습니다...루프안에서 전에 것을 지우기 때문에 문제가 발생 했던 것 같습니다

넘 감사합니다 월요일 힘드실텐데 좋은하루 보내세요!!!


by 오라리 [2018.05.28 11:11:48]

문득 loop 처리를 하시는 이유가 있는지 궁금합니다. 

DELETE 
FROM T_TMM_161 m 
WHERE EXISTS (
  select 
    'Y' 
  from t_tmm_162 s 
  where s.dy_sale = to_char(sysdate,'yyyymmdd') 
      and s.fg_use = '0' 
      and m.CD_VENR = s.cd_venr
);

INSERT 도 마찬가지로 해 주시면 loop 처리를 하는것 보다 수행 시간도 더욱 단축될것 같은 개인적인 생각입니다. 

 

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입