The following lines contain the word 'select', 'insert', 'update' or 'delete':
g_insert CONSTANT VARCHAR2(30) := hr_api.g_insert;
g_update CONSTANT VARCHAR2(30) := hr_api.g_update;
g_update_override CONSTANT VARCHAR2(30) := hr_api.g_update_override;
g_update_change_insert CONSTANT VARCHAR2(30) := hr_api.g_update_change_insert;
g_delete CONSTANT VARCHAR2(30) := hr_api.g_delete;
g_delete_next_change CONSTANT VARCHAR2(30) := hr_api.g_delete_next_change;
'SELECT t1.effective_start_date, t1.effective_end_date '||
'FROM '||LOWER(p_base_table_name)||' t1 '||
'WHERE t1.'||LOWER(p_base_key_column)||' = :p_key_value '||
'AND t1.effective_end_date >= :p_date_from '||
'ORDER BY t1.effective_start_date';
g_dynamic_sql := g_dynamic_sql || ' FOR UPDATE NOWAIT';
'SELECT oq.effective_end_date '||
'FROM '||l_table_name||' oq '||
'WHERE oq.'||l_key_column||' = :l_key_value '||
'AND oq.effective_end_date >= :p_effective_date '||
'AND EXISTS (SELECT NULL FROM '||l_table_name||
' sq WHERE sq.'||l_key_column||' = oq.'||l_key_column||
' AND sq.effective_start_date <= :p_effective_date) '||
'ORDER BY oq.effective_end_date DESC';
dt_api.g_dynamic_sql := dt_api.g_dynamic_sql||' FOR UPDATE NOWAIT';
'SELECT MAX(t.effective_end_date) '||
'FROM '||LOWER(p_base_table_name)||' t '||
'WHERE t.'||LOWER(p_base_key_column)||' = :p_base_key_value';
'SELECT t1.effective_end_date effective_end_date '||
'FROM '||p_child_table_name||' t1 '||
'WHERE t1.'||p_parent_key_column||' = :p_parent_key_value '||
'AND (t1.'||p_child_key_column||',t1.effective_start_date,'||
't1.effective_end_date) IN '||
'(SELECT t2.'||p_child_key_column||',MAX(t2.effective_start_date),'||
'MAX(t2.effective_end_date) FROM '||p_child_table_name||' t2 '||
'WHERE t2.'||p_child_key_column||' = t1.'||p_child_key_column||
' GROUP BY t2.'||p_child_key_column||')'||
' FOR UPDATE NOWAIT';
hr_utility.set_message(801, 'HR_7201_DT_NO_DELETE_CHILD');
p_update OUT NOCOPY BOOLEAN,
p_update_override OUT NOCOPY BOOLEAN,
p_update_change_insert OUT NOCOPY BOOLEAN) IS
--
l_proc varchar2(72);
l_update_start_date DATE;
l_update_end_date DATE;
,p_update => p_update
,p_update_override => p_update_override
,p_update_change_insert => p_update_change_insert
,p_correction_start_date => l_correction_start_date
,p_correction_end_date => l_correction_end_date
,p_update_start_date => l_update_start_date
,p_update_end_date => l_update_end_date
,p_upd_chg_start_date => l_upd_chg_start_date
,p_upd_chg_end_date => l_upd_chg_end_date
,p_override_start_date => l_override_start_date
,p_override_end_date => l_override_end_date
);
p_update := NULL;
p_update_override := NULL;
p_update_change_insert := NULL;
p_delete OUT NOCOPY BOOLEAN,
p_future_change OUT NOCOPY BOOLEAN,
p_delete_next_change OUT NOCOPY BOOLEAN) IS
--
l_proc varchar2(72);
l_delete_start_date DATE;
l_delete_end_date DATE;
,p_delete => p_delete
,p_future_change => p_future_change
,p_delete_next_change => p_delete_next_change
,p_zap_start_date => l_zap_start_date
,p_zap_end_date => l_zap_end_date
,p_delete_start_date => l_delete_start_date
,p_delete_end_date => l_delete_end_date
,p_del_future_start_date => l_del_future_start_date
,p_del_future_end_date => l_del_future_end_date
,p_del_next_start_date => l_del_next_start_date
,p_del_next_end_date => l_del_next_end_date
);
p_delete := NULL;
p_delete_next_change := NULL;
PROCEDURE Get_Insert_Dates
(p_effective_date IN DATE,
p_base_table_name IN VARCHAR2,
p_base_key_column IN VARCHAR2,
p_base_key_value IN NUMBER,
p_parent_table_name1 IN VARCHAR2,
p_parent_key_column1 IN VARCHAR2,
p_parent_key_value1 IN NUMBER,
p_parent_table_name2 IN VARCHAR2,
p_parent_key_column2 IN VARCHAR2,
p_parent_key_value2 IN NUMBER,
p_parent_table_name3 IN VARCHAR2,
p_parent_key_column3 IN VARCHAR2,
p_parent_key_value3 IN NUMBER,
p_parent_table_name4 IN VARCHAR2,
p_parent_key_column4 IN VARCHAR2,
p_parent_key_value4 IN NUMBER,
p_parent_table_name5 IN VARCHAR2,
p_parent_key_column5 IN VARCHAR2,
p_parent_key_value5 IN NUMBER,
p_parent_table_name6 IN VARCHAR2,
p_parent_key_column6 IN VARCHAR2,
p_parent_key_value6 IN NUMBER,
p_parent_table_name7 IN VARCHAR2,
p_parent_key_column7 IN VARCHAR2,
p_parent_key_value7 IN NUMBER,
p_parent_table_name8 IN VARCHAR2,
p_parent_key_column8 IN VARCHAR2,
p_parent_key_value8 IN NUMBER,
p_parent_table_name9 IN VARCHAR2,
p_parent_key_column9 IN VARCHAR2,
p_parent_key_value9 IN NUMBER,
p_parent_table_name10 IN VARCHAR2,
p_parent_key_column10 IN VARCHAR2,
p_parent_key_value10 IN NUMBER,
p_enforce_foreign_locking IN BOOLEAN,
p_validation_start_date OUT NOCOPY DATE,
p_validation_end_date OUT NOCOPY DATE) IS
--
l_proc VARCHAR2(72);
l_proc := g_package||'Get_Insert_Dates';
END Get_Insert_Dates;
'SELECT t.effective_start_date,t.effective_end_date '||
'FROM '||LOWER(p_base_table_name)||' t '||
'WHERE t.'||LOWER(p_base_key_column)||' = :p_base_key_value '||
'AND :p_effective_date '||
'BETWEEN t.effective_start_date AND t.effective_end_date';
PROCEDURE Get_Update_Dates
(p_effective_date IN DATE,
p_base_table_name IN VARCHAR2,
p_base_key_column IN VARCHAR2,
p_base_key_value IN NUMBER,
p_validation_start_date OUT NOCOPY DATE,
p_validation_end_date OUT NOCOPY DATE) IS
--
l_proc VARCHAR2(72);
l_proc := g_package||'Get_Update_Dates';
END Get_Update_Dates;
PROCEDURE Get_Update_Override_Dates
(p_effective_date IN DATE,
p_base_table_name IN VARCHAR2,
p_base_key_column IN VARCHAR2,
p_base_key_value IN NUMBER,
p_validation_start_date OUT NOCOPY DATE,
p_validation_end_date OUT NOCOPY DATE) IS
--
l_proc VARCHAR2(72);
l_proc := g_package||'Get_Update_Override_Dates';
hr_utility.set_message_token('DT_MODE', 'update override');
END Get_Update_Override_Dates;
PROCEDURE Get_Update_Change_Insert_Dates
(p_effective_date IN DATE,
p_base_table_name IN VARCHAR2,
p_base_key_column IN VARCHAR2,
p_base_key_value IN NUMBER,
p_validation_start_date OUT NOCOPY DATE,
p_validation_end_date OUT NOCOPY DATE) IS
--
l_proc VARCHAR2(72);
l_proc := g_package||'Get_Update_Change_Insert_Dates';
hr_utility.set_message_token('DT_MODE', 'update change insert');
END Get_Update_Change_Insert_Dates;
PROCEDURE Get_Delete_Dates
(p_effective_date IN DATE,
p_base_table_name IN VARCHAR2,
p_base_key_column IN VARCHAR2,
p_base_key_value IN NUMBER,
p_child_table_name1 IN VARCHAR2,
p_child_key_column1 IN VARCHAR2,
p_child_table_name2 IN VARCHAR2,
p_child_key_column2 IN VARCHAR2,
p_child_table_name3 IN VARCHAR2,
p_child_key_column3 IN VARCHAR2,
p_child_table_name4 IN VARCHAR2,
p_child_key_column4 IN VARCHAR2,
p_child_table_name5 IN VARCHAR2,
p_child_key_column5 IN VARCHAR2,
p_child_table_name6 IN VARCHAR2,
p_child_key_column6 IN VARCHAR2,
p_child_table_name7 IN VARCHAR2,
p_child_key_column7 IN VARCHAR2,
p_child_table_name8 IN VARCHAR2,
p_child_key_column8 IN VARCHAR2,
p_child_table_name9 IN VARCHAR2,
p_child_key_column9 IN VARCHAR2,
p_child_table_name10 IN VARCHAR2,
p_child_key_column10 IN VARCHAR2,
p_child_alt_base_key_column1 IN VARCHAR2,
p_child_alt_base_key_column2 IN VARCHAR2,
p_child_alt_base_key_column3 IN VARCHAR2,
p_child_alt_base_key_column4 IN VARCHAR2,
p_child_alt_base_key_column5 IN VARCHAR2,
p_child_alt_base_key_column6 IN VARCHAR2,
p_child_alt_base_key_column7 IN VARCHAR2,
p_child_alt_base_key_column8 IN VARCHAR2,
p_child_alt_base_key_column9 IN VARCHAR2,
p_child_alt_base_key_column10 IN VARCHAR2,
p_enforce_foreign_locking IN BOOLEAN,
p_validation_start_date OUT NOCOPY DATE,
p_validation_end_date OUT NOCOPY DATE) IS
--
l_proc VARCHAR2(72);
l_proc := g_package||'Get_Delete_Dates';
END Get_Delete_Dates;
PROCEDURE Get_Delete_Next_Change_Dates
(p_effective_date IN DATE,
p_base_table_name IN VARCHAR2,
p_base_key_column IN VARCHAR2,
p_base_key_value IN NUMBER,
p_parent_table_name1 IN VARCHAR2,
p_parent_key_column1 IN VARCHAR2,
p_parent_key_value1 IN NUMBER,
p_parent_table_name2 IN VARCHAR2,
p_parent_key_column2 IN VARCHAR2,
p_parent_key_value2 IN NUMBER,
p_parent_table_name3 IN VARCHAR2,
p_parent_key_column3 IN VARCHAR2,
p_parent_key_value3 IN NUMBER,
p_parent_table_name4 IN VARCHAR2,
p_parent_key_column4 IN VARCHAR2,
p_parent_key_value4 IN NUMBER,
p_parent_table_name5 IN VARCHAR2,
p_parent_key_column5 IN VARCHAR2,
p_parent_key_value5 IN NUMBER,
p_parent_table_name6 IN VARCHAR2,
p_parent_key_column6 IN VARCHAR2,
p_parent_key_value6 IN NUMBER,
p_parent_table_name7 IN VARCHAR2,
p_parent_key_column7 IN VARCHAR2,
p_parent_key_value7 IN NUMBER,
p_parent_table_name8 IN VARCHAR2,
p_parent_key_column8 IN VARCHAR2,
p_parent_key_value8 IN NUMBER,
p_parent_table_name9 IN VARCHAR2,
p_parent_key_column9 IN VARCHAR2,
p_parent_key_value9 IN NUMBER,
p_parent_table_name10 IN VARCHAR2,
p_parent_key_column10 IN VARCHAR2,
p_parent_key_value10 IN NUMBER,
p_validation_start_date OUT NOCOPY DATE,
p_validation_end_date OUT NOCOPY DATE) IS
--
l_proc VARCHAR2(72);
l_proc := g_package||'Get_Delete_Next_Change_Dates';
hr_utility.set_message_token('DT_MODE', ' delete next change');
END Get_Delete_Next_Change_Dates;
IF (l_datetrack_mode = dt_api.g_insert) THEN
--
Get_Insert_Dates
(p_effective_date => p_effective_date,
p_base_table_name => p_base_table_name,
p_base_key_column => p_base_key_column,
p_base_key_value => p_base_key_value,
p_parent_table_name1 => p_parent_table_name1,
p_parent_key_column1 => p_parent_key_column1,
p_parent_key_value1 => p_parent_key_value1,
p_parent_table_name2 => p_parent_table_name2,
p_parent_key_column2 => p_parent_key_column2,
p_parent_key_value2 => p_parent_key_value2,
p_parent_table_name3 => p_parent_table_name3,
p_parent_key_column3 => p_parent_key_column3,
p_parent_key_value3 => p_parent_key_value3,
p_parent_table_name4 => p_parent_table_name4,
p_parent_key_column4 => p_parent_key_column4,
p_parent_key_value4 => p_parent_key_value4,
p_parent_table_name5 => p_parent_table_name5,
p_parent_key_column5 => p_parent_key_column5,
p_parent_key_value5 => p_parent_key_value5,
p_parent_table_name6 => p_parent_table_name6,
p_parent_key_column6 => p_parent_key_column6,
p_parent_key_value6 => p_parent_key_value6,
p_parent_table_name7 => p_parent_table_name7,
p_parent_key_column7 => p_parent_key_column7,
p_parent_key_value7 => p_parent_key_value7,
p_parent_table_name8 => p_parent_table_name8,
p_parent_key_column8 => p_parent_key_column8,
p_parent_key_value8 => p_parent_key_value8,
p_parent_table_name9 => p_parent_table_name9,
p_parent_key_column9 => p_parent_key_column9,
p_parent_key_value9 => p_parent_key_value9,
p_parent_table_name10 => p_parent_table_name10,
p_parent_key_column10 => p_parent_key_column10,
p_parent_key_value10 => p_parent_key_value10,
p_enforce_foreign_locking => p_enforce_foreign_locking,
p_validation_start_date => p_validation_start_date,
p_validation_end_date => p_validation_end_date);
ELSIF (l_datetrack_mode = dt_api.g_update) THEN
--
Get_Update_Dates
(p_effective_date => p_effective_date,
p_base_table_name => p_base_table_name,
p_base_key_column => p_base_key_column,
p_base_key_value => p_base_key_value,
p_validation_start_date => p_validation_start_date,
p_validation_end_date => p_validation_end_date);
ELSIF (l_datetrack_mode = dt_api.g_delete) THEN
--
Get_Delete_Dates
(p_effective_date => p_effective_date,
p_base_table_name => p_base_table_name,
p_base_key_column => p_base_key_column,
p_base_key_value => p_base_key_value,
p_child_table_name1 => p_child_table_name1,
p_child_key_column1 => p_child_key_column1,
p_child_table_name2 => p_child_table_name2,
p_child_key_column2 => p_child_key_column2,
p_child_table_name3 => p_child_table_name3,
p_child_key_column3 => p_child_key_column3,
p_child_table_name4 => p_child_table_name4,
p_child_key_column4 => p_child_key_column4,
p_child_table_name5 => p_child_table_name5,
p_child_key_column5 => p_child_key_column5,
p_child_table_name6 => p_child_table_name6,
p_child_key_column6 => p_child_key_column6,
p_child_table_name7 => p_child_table_name7,
p_child_key_column7 => p_child_key_column7,
p_child_table_name8 => p_child_table_name8,
p_child_key_column8 => p_child_key_column8,
p_child_table_name9 => p_child_table_name9,
p_child_key_column9 => p_child_key_column9,
p_child_table_name10 => p_child_table_name10,
p_child_key_column10 => p_child_key_column10,
p_child_alt_base_key_column1 => p_child_alt_base_key_column1,
p_child_alt_base_key_column2 => p_child_alt_base_key_column2,
p_child_alt_base_key_column3 => p_child_alt_base_key_column3,
p_child_alt_base_key_column4 => p_child_alt_base_key_column4,
p_child_alt_base_key_column5 => p_child_alt_base_key_column5,
p_child_alt_base_key_column6 => p_child_alt_base_key_column6,
p_child_alt_base_key_column7 => p_child_alt_base_key_column7,
p_child_alt_base_key_column8 => p_child_alt_base_key_column8,
p_child_alt_base_key_column9 => p_child_alt_base_key_column9,
p_child_alt_base_key_column10 => p_child_alt_base_key_column10,
p_enforce_foreign_locking => p_enforce_foreign_locking,
p_validation_start_date => p_validation_start_date,
p_validation_end_date => p_validation_end_date);
ELSIF (l_datetrack_mode = dt_api.g_update_override) THEN
--
Get_Update_Override_Dates
(p_effective_date => p_effective_date,
p_base_table_name => p_base_table_name,
p_base_key_column => p_base_key_column,
p_base_key_value => p_base_key_value,
p_validation_start_date => p_validation_start_date,
p_validation_end_date => p_validation_end_date);
ELSIF (l_datetrack_mode = dt_api.g_update_change_insert) THEN
--
Get_Update_Change_Insert_Dates
(p_effective_date => p_effective_date,
p_base_table_name => p_base_table_name,
p_base_key_column => p_base_key_column,
p_base_key_value => p_base_key_value,
p_validation_start_date => p_validation_start_date,
p_validation_end_date => p_validation_end_date);
ELSIF (l_datetrack_mode = dt_api.g_delete_next_change) THEN
--
Get_Delete_Next_Change_Dates
(p_effective_date => p_effective_date,
p_base_table_name => p_base_table_name,
p_base_key_column => p_base_key_column,
p_base_key_value => p_base_key_value,
p_parent_table_name1 => p_parent_table_name1,
p_parent_key_column1 => p_parent_key_column1,
p_parent_key_value1 => p_parent_key_value1,
p_parent_table_name2 => p_parent_table_name2,
p_parent_key_column2 => p_parent_key_column2,
p_parent_key_value2 => p_parent_key_value2,
p_parent_table_name3 => p_parent_table_name3,
p_parent_key_column3 => p_parent_key_column3,
p_parent_key_value3 => p_parent_key_value3,
p_parent_table_name4 => p_parent_table_name4,
p_parent_key_column4 => p_parent_key_column4,
p_parent_key_value4 => p_parent_key_value4,
p_parent_table_name5 => p_parent_table_name5,
p_parent_key_column5 => p_parent_key_column5,
p_parent_key_value5 => p_parent_key_value5,
p_parent_table_name6 => p_parent_table_name6,
p_parent_key_column6 => p_parent_key_column6,
p_parent_key_value6 => p_parent_key_value6,
p_parent_table_name7 => p_parent_table_name7,
p_parent_key_column7 => p_parent_key_column7,
p_parent_key_value7 => p_parent_key_value7,
p_parent_table_name8 => p_parent_table_name8,
p_parent_key_column8 => p_parent_key_column8,
p_parent_key_value8 => p_parent_key_value8,
p_parent_table_name9 => p_parent_table_name9,
p_parent_key_column9 => p_parent_key_column9,
p_parent_key_value9 => p_parent_key_value9,
p_parent_table_name10 => p_parent_table_name10,
p_parent_key_column10 => p_parent_key_column10,
p_parent_key_value10 => p_parent_key_value10,
p_validation_start_date => p_validation_start_date,
p_validation_end_date => p_validation_end_date);
p_datetrack_mode = dt_api.g_update OR
p_datetrack_mode = dt_api.g_update_override OR
p_datetrack_mode = dt_api.g_update_change_insert) THEN
IF g_debug THEN
Hr_Utility.Set_Location(' Leaving:'||l_proc, 10);
p_datetrack_mode = dt_api.g_delete OR
p_datetrack_mode = dt_api.g_future_change OR
p_datetrack_mode = dt_api.g_delete_next_change) THEN
IF g_debug THEN
Hr_Utility.Set_Location(' Leaving:'||l_proc, 10);
'SELECT NVL(MAX(t.object_version_number),0) + 1 '||
'FROM '||LOWER(p_base_table_name)||' t '||
'WHERE t.'||LOWER(p_base_key_column)||' = :p_base_key_value';
'SELECT NULL '||
'FROM '||LOWER(p_base_table_name)||' t '||
'WHERE t.'||LOWER(p_base_key_column)||' = :p_base_key_value '||
'AND t.effective_start_date <= :p_to_date '||
'AND t.effective_end_date >= :p_from_date';
'SELECT MIN(t.effective_start_date),MAX(t.effective_end_date) '||
'FROM '||LOWER(p_base_table_name)||' t ' ||
'WHERE t.'||LOWER(p_base_key_column)||' = :p_base_key_value';
,p_update out nocopy boolean
,p_update_override out nocopy boolean
,p_update_change_insert out nocopy boolean
,p_correction_start_date out nocopy date
,p_correction_end_date out nocopy date
,p_update_start_date out nocopy date
,p_update_end_date out nocopy date
,p_override_start_date out nocopy date
,p_override_end_date out nocopy date
,p_upd_chg_start_date out nocopy date
,p_upd_chg_end_date out nocopy date
) IS
--
-- Local variables
--
l_effective_rows g_dt_effective_rows_tab;
p_update := FALSE;
p_update_start_date := NULL;
p_update_end_date := NULL;
p_update_override := TRUE;
p_update_change_insert := TRUE;
p_update := TRUE;
p_update_start_date := p_effective_date;
p_update_end_date :=
l_effective_rows(l_date_from_row_idx).effective_end_date;
p_update_override := FALSE;
p_update_change_insert := FALSE;
p_update := FALSE;
p_update_start_date := NULL;
p_update_end_date := NULL;
p_update_override := FALSE;
p_update_change_insert := FALSE;
p_update := NULL;
p_update_override := NULL;
p_update_change_insert := NULL;
p_update_start_date := NULL;
p_update_end_date := NULL;
,p_delete out nocopy boolean
,p_future_change out nocopy boolean
,p_delete_next_change out nocopy boolean
,p_zap_start_date out nocopy date
,p_zap_end_date out nocopy date
,p_delete_start_date out nocopy date
,p_delete_end_date out nocopy date
,p_del_future_start_date out nocopy date
,p_del_future_end_date out nocopy date
,p_del_next_start_date out nocopy date
,p_del_next_end_date out nocopy date
) is
l_effective_rows g_dt_effective_rows_tab;
l_proc := g_package||'get_update_modes_for_oaf';
p_delete := TRUE;
p_delete := FALSE;
p_delete_start_date := NULL;
p_delete_end_date := NULL;
p_delete_next_change := FALSE;
p_delete_next_change := TRUE;
p_delete_next_change := FALSE;
IF p_delete = TRUE THEN
-- Providing the maximum effective end date is not the same as the current
-- effective date then we must return the validation start and end dates.
-- However, if you attempt to do a datetrack delete where the session date is
-- the same as your maximum date then we must error.
IF (p_effective_date <>
l_effective_rows(l_effective_rows.LAST).effective_end_date) THEN
p_delete_start_date := p_effective_date + 1;
p_delete_end_date :=
l_effective_rows(l_effective_rows.LAST).effective_end_date;
IF p_delete_next_change = TRUE THEN
-- Providing the current effective end date is not the end of time
-- then we must set the validation dates
IF (l_effective_rows(l_date_from_row_idx).effective_end_date <>
dt_api.g_eot) THEN
-- check to see if future rows exist
IF l_effective_rows.COUNT > l_date_from_row_idx THEN
-- future rows exist so set the future effective end date
-- to the end date of the next datetrack row after the row for the
-- effective date
l_future_effective_end_date :=
l_effective_rows(l_date_from_row_idx + 1).effective_end_date;
hr_utility.set_message_token('DT_MODE', ' delete next change');
p_delete := null;
p_delete_next_change := null;
p_delete_start_date := null;
p_delete_end_date := null;