1 PACKAGE FND_OAM_DSCRAM_UTILS_PKG as
2 /* $Header: AFOAMDSUTILS.pls 120.6 2006/05/16 01:31:35 ilawler noship $ */
3
4 ------------
5 -- Constants
6 ------------
7
8 --prefix used for all global objects
9 G_DSCRAM_GLOBAL_PREFIX CONSTANT VARCHAR2(30) := 'FND_OAM_DSCRAM__';
10
11 -- Object types used in _STATS as the source_object_type
12 G_MODE_NORMAL CONSTANT VARCHAR2(30) := 'NORMAL'; --real run, do work
13 G_MODE_TEST CONSTANT VARCHAR2(30) := 'TEST'; --real run, just test, only ok if no side effects
14 G_MODE_TEST_NO_EXEC CONSTANT VARCHAR2(30) := 'TEST_NO_EXEC'; --real run, test prep but don't do physical DMLs/PLSQLs
15 G_MODE_DIAGNOSTIC CONSTANT VARCHAR2(30) := 'DIAGNOSTIC'; --diagnostic run
16
17 -- Object types used in _STATS as the source_object_type
18 G_TYPE_GLOBAL CONSTANT VARCHAR2(30) := 'GLOBAL';
19 G_TYPE_RUN CONSTANT VARCHAR2(30) := 'RUN';
20 G_TYPE_BUNDLE CONSTANT VARCHAR2(30) := 'BUNDLE';
21 G_TYPE_TASK CONSTANT VARCHAR2(30) := 'TASK';
22 G_TYPE_UNIT CONSTANT VARCHAR2(30) := 'UNIT';
23 G_TYPE_DML CONSTANT VARCHAR2(30) := 'DML';
24 G_TYPE_PLSQL CONSTANT VARCHAR2(30) := 'PLSQL';
25 G_TYPE_WORKER CONSTANT VARCHAR2(30) := 'WORKER'; --used by arg_values
26 G_TYPE_RANGE CONSTANT VARCHAR2(30) := 'RANGE'; --used by arg_values
27
28 -- Unit Types
29 G_UNIT_TYPE_CONC_GROUP CONSTANT VARCHAR2(30) := 'CONC_GROUP';
30 G_UNIT_TYPE_DML_SET CONSTANT VARCHAR2(30) := 'DML_SET';
31 G_UNIT_TYPE_PLSQL_SET CONSTANT VARCHAR2(30) := 'PLSQL_SET';
32
33 -- Entity Statuses: for run, bundle, task, task unit
34 G_STATUS_UNPROCESSED CONSTANT VARCHAR2(30) := 'UNPROCESSED';
35 G_STATUS_PROCESSING CONSTANT VARCHAR2(30) := 'PROCESSING';
36 G_STATUS_FINISHING CONSTANT VARCHAR2(30) := 'FINISHING';
37 G_STATUS_PROCESSED CONSTANT VARCHAR2(30) := 'PROCESSED';
38 G_STATUS_STOPPING CONSTANT VARCHAR2(30) := 'STOPPING'; --Run and Bundle only before being set to STOPPED
39 G_STATUS_STOPPED CONSTANT VARCHAR2(30) := 'STOPPED';
40 G_STATUS_SKIPPED CONSTANT VARCHAR2(30) := 'SKIPPED';
41 G_STATUS_RESTARTABLE CONSTANT VARCHAR2(30) := 'RESTARTABLE';
42 G_STATUS_ERROR_FATAL CONSTANT VARCHAR2(30) := 'ERROR_FATAL';
43 G_STATUS_ERROR_UNKNOWN CONSTANT VARCHAR2(30) := 'ERROR_UNKNOWN';
44 G_STATUS_NO_STATUS CONSTANT VARCHAR2(30) := 'NO_STATUS'; --Child units, we need a dummy value that doesn't get updated
45
46 -- Custom Return Statuses: used by execute, validate, fetch APIs of run/bundle/task/unit to augment standard FND return statuses
47 G_RET_STS_EMPTY CONSTANT VARCHAR2(6) := FND_API.G_RET_STS_ERROR||'E'; --returned by calls to fetch: task, unit
48 G_RET_STS_FULL CONSTANT VARCHAR2(6) := FND_API.G_RET_STS_ERROR||'F'; --returned by calls to fetch: unit||assign: bundle, unit
49 G_RET_STS_STOPPED CONSTANT VARCHAR2(6) := FND_API.G_RET_STS_ERROR||'S'; --returned by calls to fetch: task||execute: run, bundle
50 G_RET_STS_SKIPPED CONSTANT VARCHAR2(6) := FND_API.G_RET_STS_ERROR||'K'; --returned by calls to validate_start: task
51 G_RET_STS_PROCESSED CONSTANT VARCHAR2(6) := FND_API.G_RET_STS_ERROR||'P'; --returned by calls to execute: run, bundle
52 G_RET_STS_ERROR_FATAL CONSTANT VARCHAR2(6) := FND_API.G_RET_STS_ERROR||'Z'; --returned by calls to execute:
53 G_RET_STS_ERROR_UNKNOWN CONSTANT VARCHAR2(6) := FND_API.G_RET_STS_ERROR||'U'; --returned by calls to execute:
54 G_RET_STS_MISSING_BINDS CONSTANT VARCHAR2(6) := FND_API.G_RET_STS_ERROR||'B'; --returned by calls to arg.get_value and its variants
55 G_RET_STS_MISSING_STATE CONSTANT VARCHAR2(6) := FND_API.G_RET_STS_ERROR||'C'; --returned by calls to arg.get_value and its variants
56
57 -- Argument Source Types
58 G_SOURCE_CONSTANT CONSTANT VARCHAR2(30) := 'CONSTANT'; --source_text is a flat value
59 G_SOURCE_STATE CONSTANT VARCHAR2(30) := 'STATE'; --source_text is the name of a state key
60 G_SOURCE_EXECUTION_CURSOR CONSTANT VARCHAR2(30) := 'EXECUTION_CURSOR'; --source_text is ignored, fetch value using bind var with arg_name
61 --from the just executed cursor.
62 G_SOURCE_SQL CONSTANT VARCHAR2(30) := 'SQL'; --source_text is a sql requiring no binds or clauses
63 G_SOURCE_SQL_RESTRICTABLE CONSTANT VARCHAR2(30) := 'SQL_RESTRICTABLE'; --source_text is a sql that allows the ROWID_CLAUSE to be appended
64 --when splitting
65
66 -- Argument Permissions
67 G_PERMISSION_READ CONSTANT VARCHAR2(30) := 'READ';
68 G_PERMISSION_READ_WRITE CONSTANT VARCHAR2(30) := 'READ_WRITE';
69 G_PERMISSION_WRITE CONSTANT VARCHAR2(30) := 'WRITE';
70
71 -- Argument Write Policies
72 G_WRITE_POLICY_ONCE CONSTANT VARCHAR2(30) := 'ONCE';
73 G_WRITE_POLICY_PER_WORKER CONSTANT VARCHAR2(30) := 'PER_WORKER';
74 G_WRITE_POLICY_PER_RANGE CONSTANT VARCHAR2(30) := 'PER_RANGE';
75 G_WRITE_POLICY_ALWAYS CONSTANT VARCHAR2(30) := 'ALWAYS';
76
77 -- Argument Supported Datatypes
78 G_DATATYPE_VARCHAR2 CONSTANT VARCHAR2(30) := 'VARCHAR2';
79 G_DATATYPE_NUMBER CONSTANT VARCHAR2(30) := 'NUMBER';
80 G_DATATYPE_DATE CONSTANT VARCHAR2(30) := 'DATE';
81 --G_DATATYPE_BOOLEAN CONSTANT VARCHAR2(30) := 'BOOLEAN'; --not a supported SQL type, could store but couldn't query/bind
82 G_DATATYPE_ROWID CONSTANT VARCHAR2(30) := 'ROWID';
83
84 -- Constants used for binding rowid ranges
85 G_ARG_INTERNAL_PREFIX CONSTANT VARCHAR2(30) := 'DS__';
86 G_ARG_ROWID_LBOUND_NAME CONSTANT VARCHAR2(30) := G_ARG_INTERNAL_PREFIX||'ROWID_LBOUND';
87 G_ARG_ROWID_UBOUND_NAME CONSTANT VARCHAR2(30) := G_ARG_INTERNAL_PREFIX||'ROWID_UBOUND';
88
89 -- Prefix and Suffix prepended and appended to plsql procedures to make them compliant with dbms_sql
90 G_PLSQL_PREFIX CONSTANT VARCHAR2(60) := 'BEGIN ';
91 G_PLSQL_SUFFIX CONSTANT VARCHAR2(60) := 'END;';
92
93 -- Constants representing the various, supported argument state keys
94 G_KEY_RUN_ID CONSTANT VARCHAR2(30) := 'RUN_ID';
95 G_KEY_RUN_MODE CONSTANT VARCHAR2(30) := 'RUN_MODE';
96 G_KEY_BUNDLE_ID CONSTANT VARCHAR2(30) := 'BUNDLE_ID';
97 G_KEY_BUNDLE_WORKERS_ALLOWED CONSTANT VARCHAR2(30) := 'BUNDLE_WORKERS_ALLOWED';
98 G_KEY_BUNDLE_BATCH_SIZE CONSTANT VARCHAR2(30) := 'BUNDLE_BATCH_SIZE';
99 G_KEY_WORKER_ID CONSTANT VARCHAR2(30) := 'WORKER_ID';
100 G_KEY_TASK_ID CONSTANT VARCHAR2(30) := 'TASK_ID';
101 G_KEY_UNIT_ID CONSTANT VARCHAR2(30) := 'UNIT_ID';
102 G_KEY_USING_SPLITTING CONSTANT VARCHAR2(30) := 'USING_SPLITTING';
103 G_KEY_ROWID_LBOUND CONSTANT VARCHAR2(30) := 'ROWID_LBOUND';
104 G_KEY_ROWID_UBOUND CONSTANT VARCHAR2(30) := 'ROWID_UBOUND';
105 G_KEY_UNIT_OBJECT_OWNER CONSTANT VARCHAR2(30) := 'UNIT_OBJECT_OWNER';
106 G_KEY_UNIT_OBJECT_NAME CONSTANT VARCHAR2(30) := 'UNIT_OBJECT_NAME';
107 G_KEY_UNIT_WORKERS_ALLOWED CONSTANT VARCHAR2(30) := 'UNIT_WORKERS_ALLOWED';
108 G_KEY_UNIT_BATCH_SIZE CONSTANT VARCHAR2(30) := 'UNIT_BATCH_SIZE';
109 G_KEY_DML_ID CONSTANT VARCHAR2(30) := 'DML_ID';
110 G_KEY_PLSQL_ID CONSTANT VARCHAR2(30) := 'PLSQL_ID';
111 G_KEY_ARGUMENT_ID CONSTANT VARCHAR2(30) := 'ARGUMENT_ID';
112 G_KEY_WORKERS_ALLOWED CONSTANT VARCHAR2(30) := 'WORKERS_ALLOWED'; --unit's workers allowed or bundle's if null
113 G_KEY_BATCH_SIZE CONSTANT VARCHAR2(30) := 'BATCH_SIZE'; --unit's batch size or bundle's if null
114
115 ---------------------------------
116 -- Public Procedures/Functions --
117 ---------------------------------
118
119 -- When a VALIDATE_START_EXECUTION procedure sees a non-normal status, it uses this to reduce it to
120 -- a return status code for the procedure.
121 FUNCTION CONV_VALIDATE_START_STS_TO_RET(p_status IN VARCHAR2)
122 RETURN VARCHAR2;
123
124 -- When a VALIDATE_CONTINUED_EXECUTION procedure sees a non-normal status, it uses this to reduce it to
125 -- a return status code for the procedure.
126 FUNCTION CONV_VALIDATE_CONT_STS_TO_RET(p_status IN VARCHAR2)
127 RETURN VARCHAR2;
128
129 -- Used to convert one of the many possible return status codes into a full custom status for storage in the DB.
130 FUNCTION CONV_RET_STS_TO_COMPL_STATUS(p_ret_sts IN VARCHAR2)
131 RETURN VARCHAR2;
132
133 -- Check if the entity is in a state which can be executed
134 FUNCTION STATUS_IS_EXECUTABLE(p_status IN VARCHAR2)
135 RETURN BOOLEAN;
136
137 -- See if the unit is in progress, this includes the finishing status.
138 FUNCTION STATUS_IS_PROCESSING(p_status IN VARCHAR2)
139 RETURN BOOLEAN;
140
141 -- Tell us when the status is an end state, that is a state that can't be changed by another worker.
142 FUNCTION STATUS_IS_FINAL(p_status IN VARCHAR2)
143 RETURN BOOLEAN;
144
145 -- See if the entity's status is in one of the few possible error statuses
146 FUNCTION STATUS_IS_ERROR(p_status IN VARCHAR2)
147 RETURN BOOLEAN;
148
149 -- See if the return_status code is an error status
150 FUNCTION RET_STS_IS_ERROR(p_ret_sts IN VARCHAR2)
151 RETURN BOOLEAN;
152
153 -- When a worker is completing its work on an entity, certain
154 -- transitions in status should be supressed like Stopping->Processed. This procedure
155 -- brokers these transactions by converting proposed statuses/return status codes into
156 -- final statuses/return status codes to keep the state transitions valid for our
157 -- scheduling(run/bundle/task/unit) entities.
158 PROCEDURE TRANSLATE_COMPLETED_STATUS(p_current_status IN VARCHAR2,
159 p_workers_assigned IN NUMBER,
160 p_proposed_status IN VARCHAR2,
161 p_proposed_ret_sts IN VARCHAR2,
162 x_final_status OUT NOCOPY VARCHAR2,
163 x_final_ret_sts OUT NOCOPY VARCHAR2);
164
165 -- To detect asynchronous stops and fatally errored work, we make use of periodic status
166 -- checks. This function determines if its time for one of those checks.
167 FUNCTION VALIDATION_DUE(p_last_validated IN DATE)
168 RETURN BOOLEAN;
169
170 -- Similar to fnd_api.to_boolean but without the raise and fnd_msg call. Null becomes false.
171 FUNCTION FLAG_TO_BOOLEAN(p_flag IN VARCHAR2)
172 RETURN BOOLEAN;
173
174 -- Inverse of FLAG_TO_BOOLEAN
175 FUNCTION BOOLEAN_TO_FLAG(p_bool IN BOOLEAN)
176 RETURN VARCHAR2;
177
178 -- Currently used by UNITS_PKG to stop a parent object, task/bundle/run when an error occurs
179 -- in a unit with a fatality_level set. This method is here to facilitate propogation
180 -- if other entities support the fatality level concept.
181 PROCEDURE PROPOGATE_FATALITY_LEVEL(p_fatality_level IN VARCHAR2);
182
183 -- Used as part of the primary key when initializing the AD infrastructure. The key is
184 -- composed of a prefix, the run id and the unit id.
185 FUNCTION MAKE_AD_SCRIPT_KEY(p_run_id IN NUMBER,
186 p_unit_id IN NUMBER)
187 RETURN VARCHAR2;
188
189 --Wrapper for above, assumes run_id from run_pkg state
190 FUNCTION MAKE_AD_SCRIPT_KEY(p_unit_id IN NUMBER)
191 RETURN VARCHAR2;
192
193 -- Used to lock a run independent of whether it exists yet or not. Allocates a handle and uses
194 -- dbms_lock to control contention.
195 FUNCTION LOCK_RUN(p_run_id IN NUMBER,
196 x_lock_handle OUT NOCOPY VARCHAR2)
197 RETURN BOOLEAN;
198
199 -- Used to lock an argument independent of the arg's write location and the transaction's status.
200 -- Also uses DBMS_LOCK.
201 FUNCTION LOCK_ARG(p_arg_id IN NUMBER,
202 x_lock_handle OUT NOCOPY VARCHAR2)
203 RETURN BOOLEAN;
204
205 -- Used to delete a run and all of its sub-entites down to and including AD entities. Should
206 -- be consumed with care.
207 FUNCTION DELETE_RUN(p_run_id IN NUMBER)
208 RETURN BOOLEAN;
209
210 --used as a common predicate for determining whether we should proceed normally and commit results
211 FUNCTION RUN_IS_NORMAL
212 RETURN BOOLEAN;
213
214 --used as a common predicate for determining whether diagnostic actions should
215 --be taken. In diagnostic modes, some warnings become errors and there are more prints.
216 FUNCTION RUN_IS_DIAGNOSTIC
217 RETURN BOOLEAN;
218
219 -- checks if an arg's source type is sql-based so it can set up the cursor
220 FUNCTION SOURCE_TYPE_USES_SQL(p_source_type IN VARCHAR2)
221 RETURN BOOLEAN;
222
223 -- Used by the DML prep and ARG init to create the final statement which may or may not
224 -- append the rowid_clause depending on whether they're using AD splitting.
225 PROCEDURE MAKE_FINAL_SQL_STMT(px_arg_context IN FND_OAM_DSCRAM_ARGS_PKG.arg_context,
226 p_stmt IN VARCHAR2,
227 p_where_clause IN VARCHAR2,
228 p_use_splitting IN BOOLEAN,
229 x_final_stmt OUT NOCOPY VARCHAR2,
230 x_return_status OUT NOCOPY VARCHAR2,
231 x_return_msg OUT NOCOPY VARCHAR2);
232
233 -- Used by the BUNDLES_PKG to block when there are no available tasks until a unit has been
234 -- finished by another worker signaling progress
235 PROCEDURE WAIT_FOR_PROGRESS_ALERT;
236
237 -- Used by the UNITS_PKG to signal a progress alert whenever a unit finishes.
238 PROCEDURE SIGNAL_PROGRESS_ALERT;
239
240 -- Alerts need a commit to be sent, this is a convenience method to force send a signal.
241 PROCEDURE SIGNAL_AUT_PROGRESS_ALERT;
242
243 -- This procedure prepares to retry a run by updating its status to RESTARTABLE. It can also optionally
244 -- prepare its children. Throws exceptions on error.
245 -- Invariants:
246 -- None
247 -- Parameters:
248 -- p_run_id: The run ID to prepare
249 -- p_recurse_children: FND_API.G_TRUE/G_FALSE indicating whether to recurse and prepare child entities.
250 PROCEDURE PREPARE_RUN_FOR_RETRY(p_run_id IN NUMBER,
251 p_recurse_children IN VARCHAR2 DEFAULT NULL);
252
253 END FND_OAM_DSCRAM_UTILS_PKG;