-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathA2_SPSF.SQL
277 lines (276 loc) · 8 KB
/
A2_SPSF.SQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
CREATE OR REPLACE PROCEDURE A2AddSku(pskuid number, pskuname varchar2) AS
BEGIN
INSERT INTO A2SKU VALUES (pskuid,pskuname,0);
EXCEPTION
WHEN DUP_VAL_ON_INDEX THEN
RAISE_APPLICATION_ERROR(-20001, 'Add Sku failed. Sku already exists ' || pskuid);
WHEN OTHERS THEN
RAISE_APPLICATION_ERROR(-20999, SQLERRM);
END;
/
CREATE OR REPLACE PROCEDURE A2AddLoc(plocid number, plocname varchar2) AS
BEGIN
INSERT INTO A2LOC VALUES (plocid,plocname,0,999);
EXCEPTION
WHEN DUP_VAL_ON_INDEX THEN
RAISE_APPLICATION_ERROR(-20002, 'Add Loc failed. Loc already exists ' || plocid);
WHEN OTHERS THEN
RAISE_APPLICATION_ERROR(-20999, SQLERRM);
END;
/
CREATE OR REPLACE PROCEDURE A2RESET AS
BEGIN
DELETE FROM A2SKU;
DELETE FROM A2LOC;
EXCEPTION
WHEN OTHERS THEN
RAISE;
END;
/
CREATE OR REPLACE FUNCTION A2ListAllSkus RETURN VARCHAR2 AS
vReturnData VARCHAR2(2000);
sku_rec A2SKU%ROWTYPE;
CURSOR SKU_CUR IS SELECT SKUID,SKUNAME,SKUQTY FROM A2SKU;
BEGIN
vReturnData := 'SKU ID NAME QUANTITY '||chr(10);
vReturnData := vReturnData || '========================================'||chr(10);
OPEN SKU_CUR;
LOOP
FETCH SKU_CUR INTO sku_rec;
EXIT WHEN SKU_CUR%NOTFOUND;
vReturnData := vReturnData || sku_rec.SKUID || ' ' || sku_rec.SKUNAME || ' ' || sku_rec.SKUQTY || chr(10);
END LOOP;
CLOSE SKU_CUR;
RETURN vreturndata;
END;
/
CREATE OR REPLACE FUNCTION A2ListAllLocs RETURN VARCHAR2 AS
vReturnData VARCHAR2(2000);
Loc_rec A2LOC%ROWTYPE;
CURSOR LOC_CUR IS SELECT LOCID,LOCNAME,LOCQTY,MAXQTY FROM A2LOC;
BEGIN
vReturnData := 'LOC ID NAME QUANTITY '||chr(10);
vReturnData := vReturnData || '========================================'||chr(10);
OPEN LOC_CUR;
LOOP
FETCH LOC_CUR INTO Loc_rec;
EXIT WHEN LOC_CUR%NOTFOUND;
vReturnData := vReturnData || Loc_rec.LOCID || ' ' || Loc_rec.LOCNAME || ' ' || Loc_rec.LOCQTY || chr(10);
END LOOP;
CLOSE LOC_CUR;
RETURN vreturndata;
END;
/
CREATE OR REPLACE FUNCTION A2CountSkus RETURN NUMBER AS
vReturnNumber NUMBER;
BEGIN
SELECT COUNT(SKUID) INTO vReturnNumber FROM A2SKU;
RETURN vReturnNumber;
END;
/
CREATE OR REPLACE FUNCTION A2CountLocs RETURN NUMBER AS
vReturnNumber NUMBER;
BEGIN
SELECT COUNT(LOCID) INTO vReturnNumber FROM A2LOC;
RETURN vReturnNumber;
END;
/
CREATE OR REPLACE FUNCTION A2AddBox(pskuid number,plocid number) RETURN NUMBER AS
vReturnNumber NUMBER;
vBoxID NUMBER;
vCons_Name Varchar(100);
BEGIN
vBoxID := A2BOXSEQ.nextval;
INSERT INTO A2BOX VALUES (vBoxID,pskuid,plocid);
vReturnNumber := vBoxID;
RETURN vReturnNumber;
EXCEPTION
WHEN DUP_VAL_ON_INDEX THEN
RAISE_APPLICATION_ERROR(-20003,'Add box failed. Boxid already exists '||vBoxID);
RETURN vReturnNumber;
WHEN OTHERS THEN
vCons_Name := strip_constraint_name(SQLERRM);
IF vCons_Name='FK_A2BOX_SKUID' THEN
RAISE_APPLICATION_ERROR(-20004,'Add box failed. Unknown SKU ID: '||pskuid);
RETURN vReturnNumber;
ELSIF vCons_Name='FK_A2BOX_LOCID' THEN
RAISE_APPLICATION_ERROR(-20004,'Add box failed. Unknown LOCID ID: '||plocid);
RETURN vReturnNumber;
ELSE
RAISE;
RETURN vReturnNumber;
END IF;
END;
/
CREATE OR REPLACE PROCEDURE A2RESET AS
BEGIN
DELETE FROM A2Box;
DELETE FROM A2SKU;
DELETE FROM A2LOC;
EXCEPTION
WHEN OTHERS THEN
RAISE;
END;
/
CREATE OR REPLACE FUNCTION A2ListAllBoxes RETURN VARCHAR2 AS
vReturnData VARCHAR2(2000);
vbox_cur A2Box%ROWTYPE;
CURSOR BOX_CUR IS SELECT BOXID,SKUID,LOCID FROM A2BOX;
BEGIN
vReturnData := 'List of All Boxes:' || chr(10);
vReturnData := vReturnData || 'BOX ID SKU ID LOC ID '||chr(10);
vReturnData := vReturnData || '========================================'||chr(10);
OPEN BOX_CUR;
LOOP
FETCH BOX_CUR INTO vbox_cur;
EXIT WHEN BOX_CUR%NOTFOUND;
vReturnData := vReturnData || vbox_cur.BOXID || ' ' || vbox_cur.SKUID || ' ' || vbox_cur.LOCID || chr(10);
END LOOP;
CLOSE BOX_CUR;
RETURN vReturnData;
EXCEPTION
WHEN OTHERS THEN
RAISE;
RETURN vReturnData;
END;
/
CREATE OR REPLACE FUNCTION A2ListOneLoc(plocid NUMBER) RETURN VARCHAR2 AS
vReturnData varchar2(2000);
vBoxSkuID A2Box%ROWTYPE;
CURSOR BOX_SKU_CUR IS SELECT BOXID,SKUID,LOCID FROM A2BOX WHERE LOCID=plocid;
BEGIN
vReturnData := 'LIST OF ALL BOXES FOR LOCATION ' || plocid || ':' ||chr(10);
vReturnData := vReturnData || 'BOX ID SKU ID'||chr(10);
vReturnData := vReturnData || '===================='||chr(10);
OPEN BOX_SKU_CUR;
LOOP
FETCH BOX_SKU_CUR INTO vBoxSkuID;
EXIT WHEN BOX_SKU_CUR%NOTFOUND;
vReturnData := vReturnData || vBoxSkuID.BOXID || ' ' || vBoxSkuID.SKUID || chr(10);
END LOOP;
CLOSE BOX_SKU_CUR;
RETURN vReturnData;
EXCEPTION
WHEN NO_DATA_FOUND THEN
RAISE_APPLICATION_ERROR(-20020,'ListOneLoc failed. Location Invalid: '||plocid);
RETURN vReturnData;
END;
/
CREATE OR REPLACE FUNCTION A2CountBoxes RETURN NUMBER AS
vReturnNumber NUMBER;
BEGIN
SELECT COUNT(BOXID) INTO vReturnNumber FROM A2BOX;
RETURN vReturnNumber;
END;
/
CREATE OR REPLACE PROCEDURE A2SKUQTYINC(pskuid NUMBER) AS
BEGIN
UPDATE A2SKU SET SKUQTY=SKUQTY+1 WHERE SKUID=pskuid;
IF(SQL%ROWCOUNT < 1) THEN
RAISE_APPLICATION_ERROR(-20006,'Sku Qty Increment failed. Unknown SKU ID: '||pskuid);
END IF;
END;
/
CREATE OR REPLACE PROCEDURE A2LOCQTYINC(plocid NUMBER) AS
BEGIN
UPDATE A2LOC SET LOCQTY=LOCQTY+1 WHERE LOCID=plocid;
IF(SQL%ROWCOUNT < 1) THEN
RAISE_APPLICATION_ERROR(-20007,'Loc Qty Increment failed. Unknown LOC ID: '||plocid);
END IF;
END;
/
CREATE OR REPLACE FUNCTION A2SumSkuQty RETURN NUMBER AS
vReturnNumber NUMBER;
BEGIN
SELECT SUM(SkuQty) INTO vReturnNumber FROM A2SKU;
RETURN vReturnNumber;
END;
/
CREATE OR REPLACE FUNCTION A2SumLocQty RETURN NUMBER AS
vReturnNumber NUMBER;
BEGIN
SELECT SUM(LocQty) INTO vReturnNumber FROM A2LOC;
RETURN vReturnNumber;
END;
/
CREATE OR REPLACE PROCEDURE A2SetMaxQty(plocid NUMBER, pqty NUMBER) AS
vLOCQTY NUMBER;
BEGIN
SELECT LOCQTY INTO vLOCQTY FROM A2LOC WHERE LOCID=plocid;
IF(vLOCQTY < pqty) THEN
UPDATE A2LOC SET MaxQty=pqty WHERE LOCID=plocid;
ELSE
RAISE_APPLICATION_ERROR(-20009,'Current Qty exceeds MaxQty');
END IF;
EXCEPTION
WHEN NO_DATA_FOUND THEN
RAISE_APPLICATION_ERROR(-20008,'Location does not exist: '||plocid);
WHEN OTHERS THEN
RAISE;
END;
/
CREATE OR REPLACE PROCEDURE A2MOVEBOX(pboxid NUMBER, pToLocId NUMBER) AS
vBoxID NUMBER;
vToLocID NUMBER;
vMaxQty NUMBER;
vLOCID NUMBER;
vCons_Name VARCHAR2(100);
e_ToLoc EXCEPTION;
BEGIN
SELECT LOCID INTO vLOCID FROM A2BOX WHERE BOXID=pboxid;
UPDATE A2BOX SET LOCID=pToLocId WHERE BOXID=pboxid;
UPDATE A2LOC SET LOCQTY = LOCQTY - 1 WHERE LOCID=vLOCID;
UPDATE A2LOC SET LOCQTY = LOCQTY + 1 WHERE LOCID=pToLocId;
EXCEPTION
WHEN NO_DATA_FOUND THEN
RAISE_APPLICATION_ERROR(-20010,'Move Box failed. Boxid does not exist: '||pboxid);
WHEN OTHERS THEN
vCons_Name := STRIP_CONSTRAINT_NAME(SQLERRM);
IF(vCons_Name = 'CC_LOC_QTY_OVERFLOW') THEN
RAISE_APPLICATION_ERROR(-20012,'Move Box failed. Destination location has reached maximum capacity.: '||pToLocId);
ELSIF(vCons_Name = 'FK_A2BOX_LOCID') THEN
RAISE_APPLICATION_ERROR(-20011,'Move Box failed. To location does not exist: '||pToLocId);
ELSE
RAISE;
END IF;
END;
/
CREATE OR REPLACE PROCEDURE A2DeleteBox(pboxid NUMBER) AS
vBoxID NUMBER;
vLocID NUMBER;
vSKUID NUMBER;
BEGIN
SELECT LOCID,SKUID INTO vLocID,vSKUID FROM A2BOX WHERE BOXID=pboxid;
DELETE FROM A2BOX WHERE BOXID=pboxid;
UPDATE A2LOC SET LOCQTY = LOCQTY - 1 WHERE LOCID=vLocID;
UPDATE A2SKU SET SKUQTY = SKUQTY - 1 WHERE SKUID=vSKUID;
EXCEPTION
WHEN NO_DATA_FOUND THEN
RAISE_APPLICATION_ERROR(-20013,'Delete Box failed. Boxid does not exist: '||pboxid);
WHEN OTHERS THEN
RAISE;
END;
/
CREATE OR REPLACE PROCEDURE A2DeleteSKU(pskuid NUMBER) AS
vBoxID NUMBER;
vLocID NUMBER;
vSKUID NUMBER;
vc_BoxID SYS_REFCURSOR;
BEGIN
SELECT SKUID INTO vSKUID FROM A2SKU WHERE SKUID=pskuid;
OPEN vc_BoxID FOR SELECT BOXID FROM A2BOX WHERE skuid=pskuid;
LOOP
FETCH vc_BoxID INTO vBOXID;
EXIT WHEN vc_BoxID%NOTFOUND;
SELECT LOCID INTO vLocID FROM A2BOX WHERE boxid = vBOXID;
UPDATE A2LOC SET LOCQTY = LOCQTY - 1 WHERE LOCID = vLocID;
DELETE FROM A2BOX WHERE BOXID = vBOXID;
END LOOP;
DELETE FROM A2SKU WHERE SKUID=pskuid;
EXCEPTION
WHEN NO_DATA_FOUND THEN
RAISE_APPLICATION_ERROR(-20014,'Delete SKU failed. skuid does not exist: '||pskuid);
WHEN OTHERS THEN
RAISE;
END;
/