寫一隻程式, 可讓大家快速在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;