5: x_value OUT NOCOPY NUMBER,
6: x_return_status OUT NOCOPY VARCHAR2) IS
7: l_exist BOOLEAN := FALSE;
8: BEGIN
9: x_return_status := FND_API.G_RET_STS_SUCCESS;
10: FOR i IN 1..x_exptab.count LOOP
11: IF (x_exptab(i).pvalue_type = 'O') THEN
12: IF (x_exptab(i).poperand = x_operand) THEN
13: x_value := x_exptab(i).pvalue;
17: END IF;
18: END LOOP;
19: IF (not l_exist) THEN
20: x_value := null;
21: x_return_status := FND_API.G_RET_STS_ERROR;
22: END IF;
23:
24: EXCEPTION
25: WHEN OTHERS THEN
22: END IF;
23:
24: EXCEPTION
25: WHEN OTHERS THEN
26: x_return_status := FND_API.G_RET_STS_ERROR;
27: END check_if_oprnd_exist;
28:
29: PROCEDURE parse(x_exp IN VARCHAR2,
30: x_exptab OUT NOCOPY exptab,
37: x_value NUMBER;
38: x_result NUMBER;
39: BEGIN
40: FND_MSG_PUB.initialize;
41: x_return_status := FND_API.G_RET_STS_SUCCESS;
42: IF (x_exp IS NOT NULL) THEN
43: x_len := length(x_exp);
44: FOR i IN 1..x_len LOOP
45: IF (substr(x_exp,i,1) = '"') THEN
55: SELECT MOD(q_count,2) into x_result from sys.dual;
56: IF x_result > 0 THEN
57: FND_MESSAGE.SET_NAME('GMD','GMD_INVALID_OPERANDS');
58: FND_MSG_PUB.ADD;
59: x_return_status := FND_API.G_RET_STS_ERROR;
60: RETURN;
61: END IF;
62: END IF;
63: IF (ob_count <> cb_count) THEN
62: END IF;
63: IF (ob_count <> cb_count) THEN
64: FND_MESSAGE.SET_NAME('GMD','GMD_WRONG_PARENTHESIS');
65: FND_MSG_PUB.ADD;
66: x_return_status := FND_API.G_RET_STS_ERROR;
67: RETURN;
68: END IF;
69: tokenize_exp(x_exp,x_exptab);
70: IF (x_exptab.count > 0 ) THEN
76: END IF;
77:
78: EXCEPTION
79: WHEN OTHERS THEN
80: x_return_status := FND_API.G_RET_STS_ERROR;
81: END parse;
82:
83:
84: PROCEDURE tokenize_exp(pexp IN VARCHAR2,
140: x_result NUMBER;
141: x_expression VARCHAR2(4000);--BUG#3173796 Increased to 4000 from 2000
142: INVALID_EXPRESSION EXCEPTION;
143: BEGIN
144: x_return_status := FND_API.G_RET_STS_SUCCESS;
145: IF (pexptab.count = 0) THEN
146: FND_MESSAGE.SET_NAME('GMD','GMD_NO_EXPRESSION');
147: FND_MSG_PUB.ADD;
148: x_return_status := FND_API.G_RET_STS_ERROR;
144: x_return_status := FND_API.G_RET_STS_SUCCESS;
145: IF (pexptab.count = 0) THEN
146: FND_MESSAGE.SET_NAME('GMD','GMD_NO_EXPRESSION');
147: FND_MSG_PUB.ADD;
148: x_return_status := FND_API.G_RET_STS_ERROR;
149: RETURN;
150: END IF;
151:
152: FOR i in 1..pexptab.count LOOP
174: EXCEPTION
175: WHEN INVALID_EXPRESSION THEN
176: FND_MESSAGE.SET_NAME('GMD','GMD_INVALID_EXPRESSION');
177: FND_MSG_PUB.ADD;
178: x_return_status := FND_API.G_RET_STS_ERROR;
179: WHEN OTHERS THEN
180: x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
181: END evaluate_exp;
182:
176: FND_MESSAGE.SET_NAME('GMD','GMD_INVALID_EXPRESSION');
177: FND_MSG_PUB.ADD;
178: x_return_status := FND_API.G_RET_STS_ERROR;
179: WHEN OTHERS THEN
180: x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
181: END evaluate_exp;
182:
183:
184: PROCEDURE execute_exp(pexp IN VARCHAR2,
191: l_result NUMBER;
192: l_dummy INTEGER;
193: format_profile VARCHAR2(30);
194: BEGIN
195: x_return_status := FND_API.G_RET_STS_SUCCESS;
196:
197: --RLNAGARA Bug 5006158
198:
199: format_profile := FND_PROFILE.VALUE('ICX_NUMERIC_CHARACTERS');
223: EXCEPTION
224: WHEN OTHERS THEN
225:
226: IF (SQLCODE = -1476 AND NOT pexp_test) THEN
227: x_return_status := FND_API.G_RET_STS_ERROR;
228: FND_MESSAGE.SET_NAME('GMD','GMD_EVAL_DIVIDE_BY_ZERO');
229: FND_MSG_PUB.ADD;
230: ELSIF(SQLCODE <> -1476) THEN
231: x_return_status := FND_API.G_RET_STS_ERROR;
227: x_return_status := FND_API.G_RET_STS_ERROR;
228: FND_MESSAGE.SET_NAME('GMD','GMD_EVAL_DIVIDE_BY_ZERO');
229: FND_MSG_PUB.ADD;
230: ELSIF(SQLCODE <> -1476) THEN
231: x_return_status := FND_API.G_RET_STS_ERROR;
232: FND_MESSAGE.SET_NAME('GMD','GMD_INVALID_EXPRESSION');
233: FND_MSG_PUB.ADD;
234: ELSE
235: x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
231: x_return_status := FND_API.G_RET_STS_ERROR;
232: FND_MESSAGE.SET_NAME('GMD','GMD_INVALID_EXPRESSION');
233: FND_MSG_PUB.ADD;
234: ELSE
235: x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
236: END IF;
237: --dbms_output.put_line(SQLCODE||'-'||SQLERRM);
238: END execute_exp;
239:
242: p_exptab IN OUT NOCOPY exptab,
243: x_return_Status OUT NOCOPY VARCHAR2) IS
244: l_var_assign NUMBER := 0;
245: BEGIN
246: x_return_status := FND_API.G_RET_STS_SUCCESS;
247: FND_MSG_PUB.INITIALIZE;
248:
249: -- B3199585
250: -- IF (pvar_name IS NULL OR pvar_value IS NULL) THEN
247: FND_MSG_PUB.INITIALIZE;
248:
249: -- B3199585
250: -- IF (pvar_name IS NULL OR pvar_value IS NULL) THEN
251: -- x_return_status := FND_API.G_RET_STS_ERROR;
252: -- FND_MESSAGE.SET_NAME('GMD','GMD_NO_PARAMETER_VALUES');
253: -- FND_MESSAGE.SET_TOKEN('VARNAME',pvar_name);
254: -- FND_MSG_PUB.ADD;
255: -- RETURN;
255: -- RETURN;
256: -- END IF;
257:
258: IF (p_exptab.count = 0) THEN
259: x_return_status := FND_API.G_RET_STS_ERROR;
260: FND_MESSAGE.SET_NAME('GMD','GMD_NO_EXPRESSION');
261: FND_MSG_PUB.ADD;
262: RETURN;
263: END IF;
273: IF (l_var_assign = 0) THEN
274: FND_MESSAGE.SET_NAME('GMD','GMD_INVALID_VARIABLE');
275: FND_MESSAGE.SET_TOKEN('VARNAME',pvar_name);
276: FND_MSG_PUB.ADD;
277: x_return_Status := FND_API.G_RET_STS_ERROR;
278: END IF;
279:
280: EXCEPTION
281: WHEN OTHERS THEN
278: END IF;
279:
280: EXCEPTION
281: WHEN OTHERS THEN
282: x_return_status := FND_API.G_RET_STS_ERROR;
283: END variable_value;
284:
285: END GMD_UTILITY_PKG;