51:
52: from_class varchar2(10);
53: to_class varchar2(10);
54:
55: CURSOR standard_conversions IS
56: SELECT t.conversion_rate std_to_rate,
57: t.to_uom_class std_to_class,
58: f.conversion_rate std_from_rate,
59: f.from_uom_class std_from_class
68: ORDER BY t.sr_item_pk DESC,
69: f.sr_item_pk DESC;
70:
71:
72: std_rec standard_conversions%rowtype;
73:
74:
75: CURSOR interclass_conversions(p_from_class VARCHAR2, p_to_class VARCHAR2) IS
76: select decode(from_uom_class, p_from_class, 1, 2) from_flag,
113: **
114: ** 1. The conversion always starts from the conversion defined, if exists,
115: ** for an specified item.
116: ** 2. If the conversion id not defined for that specific item, then the
117: ** standard conversion, which is defined for all items, is used.
118: ** 3. When the conversion involves two different classes, then
119: ** interclass conversion is activated.
120: */
121:
127: goto procedure_end;
128: end if;
129:
130:
131: /* Get item specific or standard conversions */
132: open standard_conversions;
133: std_index := 0;
134: loop
135:
128: end if;
129:
130:
131: /* Get item specific or standard conversions */
132: open standard_conversions;
133: std_index := 0;
134: loop
135:
136: std_index := std_index + 1;
134: loop
135:
136: std_index := std_index + 1;
137:
138: fetch standard_conversions into std_rec;
139: exit when standard_conversions%notfound;
140:
141: from_rate_tab(std_index) := std_rec.std_from_rate;
142: from_class_tab(std_index) := std_rec.std_from_class;
135:
136: std_index := std_index + 1;
137:
138: fetch standard_conversions into std_rec;
139: exit when standard_conversions%notfound;
140:
141: from_rate_tab(std_index) := std_rec.std_from_rate;
142: from_class_tab(std_index) := std_rec.std_from_class;
143: to_rate_tab(std_index) := std_rec.std_to_rate;
144: to_class_tab(std_index) := std_rec.std_to_class;
145:
146: end loop;
147:
148: close standard_conversions;
149:
150: if (std_index = 0) then /* No conversions defined */
151: msgbuf := msgbuf||'Invalid standard conversion : ';
152: msgbuf := msgbuf||'From UOM code: '||from_unit||' ';
147:
148: close standard_conversions;
149:
150: if (std_index = 0) then /* No conversions defined */
151: msgbuf := msgbuf||'Invalid standard conversion : ';
152: msgbuf := msgbuf||'From UOM code: '||from_unit||' ';
153: msgbuf := msgbuf||'To UOM code: '||to_unit||' ';
154: raise invalid_conversion;
155:
202: end if; /* End of from_class <> to_class */
203:
204: /*
205: ** conversion rates are defaulted to '1' at the start of the procedure
206: ** so seperate calculations are not required for standard/interclass
207: ** conversions
208: */
209:
210: if (to_rate <> 0 ) then