物料大部分的属性批量更新可用以下API操作,以下代码只是更新了状态,其他属性可自行测试
-- back table CUX.MTL_SYSTEM_ITEMS_BK210528 DECLARE l_item_rec inv_item_grp.item_rec_type; x_item_rec inv_item_grp.item_rec_type; x_error_tbl inv_item_grp.error_tbl_type; x_return_status VARCHAR2(1); l_error_Msg VARCHAR2(4000); CURSOR r IS SELECT c.* ,c.rowid row_id FROM /*cux.cux_item_status_update*/cux.cux_inv_item_status c WHERE 1 = 1 --AND c.item_number = '54500249' AND c.inventory_item_id IS NOT NULL AND c.batch_no = 20230530001 AND nvl(c.status ,'E') <> 'S'; BEGIN fnd_global.apps_initialize(user_id => 0 ,resp_id => 50947 ,resp_appl_id => 20003); FOR rec IN r LOOP --Item l_item_rec.inventory_item_id := rec.inventory_item_id; l_item_rec.organization_id := rec.organization_id; l_item_rec.inventory_item_status_code := 'Inactive'; --API inv_item_grp.update_item(p_commit => fnd_api.g_false ,p_item_rec => l_item_rec ,x_item_rec => x_item_rec ,x_return_status => x_return_status ,x_error_tbl => x_error_tbl); --Result IF x_return_status <> fnd_api.g_ret_sts_success THEN l_error_Msg := NULL; FOR i IN 1..x_error_tbl.count LOOP --dbms_output.put_line(x_error_tbl(i).MESSAGE_NAME ||'--' || x_error_tbl(i).MESSAGE_TEXT); l_error_Msg := x_error_tbl(i).MESSAGE_NAME ||'--' || x_error_tbl(i).MESSAGE_TEXT; END LOOP; --dbms_output.put_line(rec.item_number); ROLLBACK; UPDATE cux.cux_inv_item_status c SET c.status = 'E' ,c.err_msg = substr(l_error_Msg, 1,2000) WHERE c.rowid = rec.row_id; COMMIT; --RETURN ; ELSE UPDATE cux.cux_inv_item_status c SET c.status = 'S' ,c.err_msg = NULL WHERE c.rowid = rec.row_id; COMMIT; END IF; END LOOP; dbms_output.put_line('END'); EXCEPTION WHEN OTHERS THEN dbms_output.put_line(SQLCODE || '--' || SQLERRM); END;