close

寫一隻程式, 可讓大家快速在QM plan 中 新增類似valueset 的資料.
後續有其他欄位lov 需求可利用此方式快速新增與同步.


執行範例: 同步GB2_生產記錄表 plan 中GBE_PRODUCT_DEPT 的value set.
當然其他欄位只要你能產生value sql ,也可以呼叫.
 
--gb_sync_qa_plan_char_values(iplan_id in number ,ichar_id in number, isql in varchar2 )     
 /*  iplan_id  collection plan id */
 /*  ichar_id quantity collection element id  */
 /*  執行撈取value 的SQL,注意, 只能撈取兩個欄位值, 第一個給short_code , 第二個給description */


declare
  vsql varchar2(2000):=null;
begin
  -- 組合動態SQL , 撈出我要產生同步的short_code , description
  vsql := 'SELECT DEPTNO shor_code ,DEPTNM_SPATH description from V_DEPARTMENT ' ;
  vsql := vsql || ' where mfg_flag = ''Y'' AND dept_lv > 4 AND ACTIVATE = ''Y'' ' ;
 --傳入 plan_id , char_id , 資料sql 已進行同步!
 gb_sync_qa_plan_char_values(1102,2213,vsql);
end;

 


程式碼:
create or replace procedure gb_sync_qa_plan_char_values(iplan_id in number ,ichar_id in number, isql in varchar2 ) as
 /*  Arthor Nolem Lin 20110714  */
 /*  Scope : 新增及同步品管蒐集要素的value set */  
 /*  iplan_id  collection plan id */
 /*  ichar_id quantity collection element id  */
 /*  isql 執行撈取value 的SQL,注意, 只能撈取兩個欄位值, 第一個給short_code , 第二個給description */
 /*   此程式不包含自動刪除已失效value */
 
  type t_refcur is ref cursor;
  cur t_refcur;
  vuser number:=1;
  rec QA_PLAN_CHAR_VALUE_LOOKUPS%rowtype;
  rec_init QA_PLAN_CHAR_VALUE_LOOKUPS%rowtype;
  procedure sync_value(in_rec QA_PLAN_CHAR_VALUE_LOOKUPS%rowtype) is
  begin
    begin
      insert into QA_PLAN_CHAR_VALUE_LOOKUPS
                  (PLAN_ID,CHAR_ID,SHORT_CODE,DESCRIPTION,CREATED_BY,CREATION_DATE,LAST_UPDATED_BY,LAST_UPDATE_DATE)
             values (iplan_id,ichar_id,rec.short_code,rec.description,vuser,sysdate,vuser,sysdate);     
    exception
      when dup_val_on_index then
         update QA_PLAN_CHAR_VALUE_LOOKUPS
            set DESCRIPTION =rec.description ,
                LAST_UPDATED_BY= vuser,
                LAST_UPDATE_DATE=sysdate
          where PLAN_ID=iplan_id
            and CHAR_ID=ichar_id
            and SHORT_CODE=rec.short_code;                    
    end;
    commit;
  end;
begin
 
  open cur   for isql ;  
    loop  
      rec := rec_init;
      fetch   cur    into   rec.short_code,rec.description;  
      exit   when   cur%notfound;   
      sync_value(rec) ;   
     dbms_output.put_line(rec.short_code || '=' || rec.description);  
    end   loop;      
  --QA_PLAN_CHAR_VALUE_LOOKUPS
end;



arrow
arrow
    全站熱搜
    創作者介紹
    創作者 Nolem 的頭像
    Nolem

    Nolem的部落格

    Nolem 發表在 痞客邦 留言(0) 人氣()