DBA Data[Home] [Help]

PACKAGE BODY: APPS.BSC_CAUSE_EFFECT_REL_PVT

Source


1 PACKAGE BODY BSC_CAUSE_EFFECT_REL_PVT AS
2 /* $Header: BSCVCAEB.pls 120.0 2005/06/01 16:04:30 appldev noship $ */
3 
4 G_PKG_NAME              CONSTANT        VARCHAR2(30) := 'BSC_CAUSE_EFFECT_REL_PVT';
5 g_db_object                             VARCHAR2(30) := NULL;
6 
7 PROCEDURE Create_Cause_Effect_Rel(
8   p_commit              	IN      VARCHAR2 := FND_API.G_FALSE
9  ,p_Bsc_Cause_Effect_Rel_Rec	IN      BSC_CAUSE_EFFECT_REL_PUB.Bsc_Cause_Effect_Rel_Rec
10  ,x_return_status       	OUT NOCOPY     VARCHAR2
11  ,x_msg_count           	OUT NOCOPY     NUMBER
12  ,x_msg_data            	OUT NOCOPY     VARCHAR2
13 ) IS
14 
15 l_count				NUMBER;
16 l_dynamic_sql       VARCHAR2(32000);
17 
18 BEGIN
19 
20   -- Check that all the information is provided
21   IF p_Bsc_Cause_Effect_Rel_Rec.Cause_Indicator IS NULL THEN
22       FND_MESSAGE.SET_NAME('BSC','BSC_INVALID_CAUSE_INDICATOR');
23       FND_MSG_PUB.ADD;
24       RAISE FND_API.G_EXC_ERROR;
25   END IF;
26 
27   IF p_Bsc_Cause_Effect_Rel_Rec.Cause_Level NOT IN ('KPI', 'DATASET') THEN
28       FND_MESSAGE.SET_NAME('BSC','BSC_INVALID_CAUSE_LEVEL');
29       FND_MSG_PUB.ADD;
30       RAISE FND_API.G_EXC_ERROR;
31   END IF;
32 
33   IF p_Bsc_Cause_Effect_Rel_Rec.Effect_Indicator IS NULL THEN
34       FND_MESSAGE.SET_NAME('BSC','BSC_INVALID_EFFECT_INDICATOR');
35       FND_MSG_PUB.ADD;
36       RAISE FND_API.G_EXC_ERROR;
37   END IF;
38 
39   IF p_Bsc_Cause_Effect_Rel_Rec.Effect_Level NOT IN ('KPI', 'DATASET') THEN
40       FND_MESSAGE.SET_NAME('BSC','BSC_INVALID_EFFECT_LEVEL');
41       FND_MSG_PUB.ADD;
42       RAISE FND_API.G_EXC_ERROR;
43   END IF;
44 
45   -- Check that the kpi (if KPI level) or dataset (DATASET level) already exists
46   l_count := 0;
47   IF p_Bsc_Cause_Effect_Rel_Rec.Cause_Level = 'KPI' THEN
48       SELECT count(*) INTO l_count
49       FROM bsc_kpis_b
50       WHERE indicator = p_Bsc_Cause_Effect_Rel_Rec.Cause_Indicator;
51   ELSE
52       SELECT count(*) INTO l_count
53       FROM bsc_sys_datasets_b
54       WHERE dataset_id = p_Bsc_Cause_Effect_Rel_Rec.Cause_Indicator;
55   END IF;
56   IF l_count = 0 THEN
57       FND_MESSAGE.SET_NAME('BSC','BSC_INVALID_CAUSE_INDICATOR');
58       FND_MSG_PUB.ADD;
59       RAISE FND_API.G_EXC_ERROR;
60   END IF;
61 
62   l_count := 0;
63   IF p_Bsc_Cause_Effect_Rel_Rec.Effect_Level = 'KPI' THEN
64       SELECT count(*) INTO l_count
65       FROM bsc_kpis_b
66       WHERE indicator = p_Bsc_Cause_Effect_Rel_Rec.Effect_Indicator;
67   ELSE
68       SELECT count(*) INTO l_count
69       FROM bsc_sys_datasets_b
70       WHERE dataset_id = p_Bsc_Cause_Effect_Rel_Rec.Effect_Indicator;
71   END IF;
72   IF l_count = 0 THEN
73       FND_MESSAGE.SET_NAME('BSC','BSC_INVALID_EFFECT_INDICATOR');
74       FND_MSG_PUB.ADD;
75       RAISE FND_API.G_EXC_ERROR;
76   END IF;
77 
78   -- Now that the record is validated, we can insert the record in the table BSC_KPI_CAUSE_EFFECT_RELS
79   -- Only create the relation if it already does not exists
80   l_count := 0;
81   SELECT count(*) INTO l_count
82   FROM bsc_kpi_cause_effect_rels
83   WHERE
84       cause_indicator = p_Bsc_Cause_Effect_Rel_Rec.Cause_Indicator AND
85       effect_indicator = p_Bsc_Cause_Effect_Rel_Rec.Effect_Indicator AND
86       NVL(cause_level, 'KPI') = p_Bsc_Cause_Effect_Rel_Rec.Cause_Level AND
87       NVL(effect_level, 'KPI') = p_Bsc_Cause_Effect_Rel_Rec.Effect_Level;
88 
89   IF l_count = 0 THEN
90 
91       l_dynamic_sql := 'INSERT INTO bsc_kpi_cause_effect_rels (cause_indicator,effect_indicator,'||
92                        'cause_level,effect_level)VALUES (:1,:2,:3,:4)';
93 
94 
95       EXECUTE IMMEDIATE l_dynamic_sql USING p_Bsc_Cause_Effect_Rel_Rec.Cause_Indicator,p_Bsc_Cause_Effect_Rel_Rec.Effect_Indicator,p_Bsc_Cause_Effect_Rel_Rec.Cause_Level,p_Bsc_Cause_Effect_Rel_Rec.Effect_Level;
96   END IF;
97   IF (p_commit = FND_API.G_TRUE) THEN
98       COMMIT;
99   END IF;
100 
101 EXCEPTION
102   WHEN FND_API.G_EXC_ERROR THEN
103     rollback;
104     x_return_status := FND_API.G_RET_STS_ERROR;
105     FND_MSG_PUB.Count_And_Get( p_count  =>      x_msg_count
106                               ,p_data   =>      x_msg_data);
107   WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
108     rollback;
109     x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
110     FND_MSG_PUB.Count_And_Get( p_count    =>      x_msg_count
111                               ,p_data     =>      x_msg_data);
112   WHEN NO_DATA_FOUND THEN
113     rollback;
114     x_return_status := FND_API.G_RET_STS_ERROR;
115     FND_MSG_PUB.Count_And_Get( p_count    =>      x_msg_count
116                               ,p_data     =>      x_msg_data);
117   WHEN OTHERS THEN
118     rollback;
119     x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
120     FND_MSG_PUB.Count_And_Get( p_count    =>      x_msg_count
121                               ,p_data     =>      x_msg_data);
122 
123 END Create_Cause_Effect_Rel;
124 
125 /************************************************************************************
126 ************************************************************************************/
127 
128 PROCEDURE Delete_Cause_Effect_Rel(
129   p_commit              	IN      VARCHAR2 := FND_API.G_FALSE
130  ,p_Bsc_Cause_Effect_Rel_Rec	IN      BSC_CAUSE_EFFECT_REL_PUB.Bsc_Cause_Effect_Rel_Rec
131  ,x_return_status       	OUT NOCOPY     VARCHAR2
132  ,x_msg_count           	OUT NOCOPY     NUMBER
133  ,x_msg_data            	OUT NOCOPY     VARCHAR2
134 ) IS
135 
136 l_count				NUMBER;
137 
138 BEGIN
139 
140   -- I do not need to make validations. It just delete the record if exists.
141   -- If it does not exist it is OK.
142   DELETE FROM bsc_kpi_cause_effect_rels
143   WHERE
144       cause_indicator = p_Bsc_Cause_Effect_Rel_Rec.Cause_Indicator AND
145       effect_indicator = p_Bsc_Cause_Effect_Rel_Rec.Effect_Indicator AND
146       NVL(cause_level, 'KPI') = p_Bsc_Cause_Effect_Rel_Rec.Cause_Level AND
147       NVL(effect_level, 'KPI') = p_Bsc_Cause_Effect_Rel_Rec.Effect_Level;
148 
149   IF (p_commit = FND_API.G_TRUE) THEN
150       COMMIT;
151   END IF;
152 
153 EXCEPTION
154   WHEN FND_API.G_EXC_ERROR THEN
155     rollback;
156     x_return_status := FND_API.G_RET_STS_ERROR;
157     FND_MSG_PUB.Count_And_Get( p_count  =>      x_msg_count
158                               ,p_data   =>      x_msg_data);
159   WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
160     rollback;
161     x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
162     FND_MSG_PUB.Count_And_Get( p_count    =>      x_msg_count
163                               ,p_data     =>      x_msg_data);
164   WHEN NO_DATA_FOUND THEN
165     rollback;
166     x_return_status := FND_API.G_RET_STS_ERROR;
167     FND_MSG_PUB.Count_And_Get( p_count    =>      x_msg_count
168                               ,p_data     =>      x_msg_data);
169   WHEN OTHERS THEN
170     rollback;
171     x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
172     FND_MSG_PUB.Count_And_Get( p_count    =>      x_msg_count
173                               ,p_data     =>      x_msg_data);
174 
175 END Delete_Cause_Effect_Rel;
176 
177 /************************************************************************************
178 ************************************************************************************/
179 
180 PROCEDURE Delete_All_Cause_Effect_Rels(
181   p_commit              	IN      VARCHAR2 := FND_API.G_FALSE
182  ,p_indicator			IN      NUMBER
183  ,p_level			IN      VARCHAR2
184  ,x_return_status       	OUT NOCOPY     VARCHAR2
185  ,x_msg_count           	OUT NOCOPY     NUMBER
186  ,x_msg_data            	OUT NOCOPY     VARCHAR2
187 ) IS
188 
189 l_count				NUMBER;
190 
191 BEGIN
192 
193   -- I do not need to make validations. It just delete the records if exists.
194   -- If it does not exist it is OK.
195   DELETE FROM bsc_kpi_cause_effect_rels
196   WHERE
197       (cause_indicator = p_indicator AND NVL(cause_level, 'KPI') = p_level) OR
198       (effect_indicator = p_indicator AND NVL(effect_level, 'KPI') = p_level);
199 
200   IF (p_commit = FND_API.G_TRUE) THEN
201       COMMIT;
202   END IF;
203 
204 EXCEPTION
205   WHEN FND_API.G_EXC_ERROR THEN
206     rollback;
207     x_return_status := FND_API.G_RET_STS_ERROR;
208     FND_MSG_PUB.Count_And_Get( p_count  =>      x_msg_count
209                               ,p_data   =>      x_msg_data);
210   WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
211     rollback;
212     x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
213     FND_MSG_PUB.Count_And_Get( p_count    =>      x_msg_count
214                               ,p_data     =>      x_msg_data);
215   WHEN NO_DATA_FOUND THEN
216     rollback;
217     x_return_status := FND_API.G_RET_STS_ERROR;
218     FND_MSG_PUB.Count_And_Get( p_count    =>      x_msg_count
219                               ,p_data     =>      x_msg_data);
220   WHEN OTHERS THEN
221     rollback;
222     x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
223     FND_MSG_PUB.Count_And_Get( p_count    =>      x_msg_count
224                               ,p_data     =>      x_msg_data);
225 
226 END Delete_All_Cause_Effect_Rels;
227 
228 /************************************************************************************
229 ************************************************************************************/
230 
231 END BSC_CAUSE_EFFECT_REL_PVT;