The following lines contain the word 'select', 'insert', 'update' or 'delete':
SELECT user_status_id
FROM ams_user_statuses_b
WHERE system_status_type = p_status_type
AND system_status_code = p_status_code
AND default_flag = 'Y'
AND enabled_flag = 'Y'
;
SELECT system_status_code
FROM ams_user_statuses_b
WHERE system_status_type = p_status_type
AND user_status_id = p_status_id
;
x_selections_changed_flag OUT NOCOPY VARCHAR2
);
SELECT show_in_lov_flag,
theme_approval_flag, budget_approval_flag
FROM ams_status_order_rules
WHERE system_status_type = p_system_status_type
AND current_status_code = p_curr_status
AND next_status_code = p_next_status;
SELECT MODEL_ID
FROM ams_dm_models_all_b
WHERE MODEL_ID = p_MODEL_ID
AND object_version_number = p_object_version
FOR UPDATE NOWAIT;
SELECT MODEL_ID
FROM ams_dm_models_all_tl
WHERE MODEL_ID = p_MODEL_ID
AND USERENV('LANG') IN (language, source_lang)
FOR UPDATE NOWAIT;
L_DEFAULT_SELECTION_TYPE CONSTANT VARCHAR2(30) := 'STANDARD';
SELECT ams_dm_models_all_b_s.NEXTVAL
FROM DUAL;
SELECT 1
FROM ams_dm_models_vl
WHERE model_id = p_model_id;
SELECT system_status_code
FROM ams_user_statuses_vl
WHERE user_status_id = p_user_status_id;
SELECT custom_setup_id
FROM ams_custom_setups_b
WHERE object_type = G_OBJECT_TYPE_MODEL
AND enabled_flag = 'Y'
;
IF l_dm_model_rec.row_selection_type IS NULL OR l_dm_model_rec.row_selection_type = FND_API.g_miss_char THEN
l_dm_model_rec.row_selection_type := L_DEFAULT_SELECTION_TYPE;
AMS_DM_MODELS_B_PKG.Insert_Row(
p_model_id => l_dm_model_rec.model_id,
p_last_update_date => sysdate,
p_last_updated_by => FND_GLOBAL.USER_ID,
p_creation_date => sysdate,
p_created_by => FND_GLOBAL.USER_ID,
p_last_update_login => FND_GLOBAL.CONC_LOGIN_ID,
p_object_version_number => l_object_version_number,
p_model_type => l_dm_model_rec.model_type,
p_user_status_id => l_dm_model_rec.user_status_id,
p_status_code => l_dm_model_rec.status_code,
p_status_date => l_dm_model_rec.status_date,
p_last_build_date => l_dm_model_rec.last_build_date,
p_owner_user_id => l_dm_model_rec.owner_user_id,
p_performance => l_dm_model_rec.performance,
p_target_group_type => l_dm_model_rec.target_group_type,
p_darwin_model_ref => l_dm_model_rec.darwin_model_ref,
p_model_name => l_dm_model_rec.model_name,
p_description => l_dm_model_rec.description,
p_scheduled_date => l_dm_model_rec.scheduled_date,
p_scheduled_timezone_id => l_dm_model_rec.scheduled_timezone_id,
p_expiration_date => l_dm_model_rec.expiration_date,
p_results_flag => NVL (l_dm_model_rec.results_flag, 'N'),
p_LOGS_FLAG => NVL (p_dm_model_rec.LOGS_FLAG, 'N'),
p_TARGET_FIELD => l_dm_model_rec.TARGET_FIELD,
p_TARGET_TYPE => l_dm_model_rec.TARGET_TYPE,
p_TARGET_POSITIVE_VALUE => l_dm_model_rec.TARGET_POSITIVE_VALUE,
p_TOTAL_RECORDS => l_dm_model_rec.TOTAL_RECORDS,
p_TOTAL_POSITIVES => l_dm_model_rec.TOTAL_POSITIVES,
p_MIN_RECORDS => l_dm_model_rec.MIN_RECORDS,
p_MAX_RECORDS => l_dm_model_rec.MAX_RECORDS,
p_row_selection_type => NVL (l_dm_model_rec.row_selection_type, L_DEFAULT_SELECTION_TYPE),
p_EVERY_NTH_ROW => l_dm_model_rec.EVERY_NTH_ROW,
p_PCT_RANDOM => l_dm_model_rec.PCT_RANDOM,
p_best_subtree => l_dm_model_rec.best_subtree,
p_custom_setup_id => l_dm_model_rec.custom_setup_id,
p_country_id => l_dm_model_rec.country_id,
p_wf_itemkey => l_dm_model_rec.wf_itemkey,
p_target_id => l_dm_model_rec.target_id,
p_attribute_category => l_dm_model_rec.attribute_category,
p_attribute1 => l_dm_model_rec.attribute1,
p_attribute2 => l_dm_model_rec.attribute2,
p_attribute3 => l_dm_model_rec.attribute3,
p_attribute4 => l_dm_model_rec.attribute4,
p_attribute5 => l_dm_model_rec.attribute5,
p_attribute6 => l_dm_model_rec.attribute6,
p_attribute7 => l_dm_model_rec.attribute7,
p_attribute8 => l_dm_model_rec.attribute8,
p_attribute9 => l_dm_model_rec.attribute9,
p_attribute10 => l_dm_model_rec.attribute10,
p_attribute11 => l_dm_model_rec.attribute11,
p_attribute12 => l_dm_model_rec.attribute12,
p_attribute13 => l_dm_model_rec.attribute13,
p_attribute14 => l_dm_model_rec.attribute14,
p_attribute15 => l_dm_model_rec.attribute15
);
l_access_rec.delete_flag := 'N';
PROCEDURE Update_dm_model(
p_api_version_number IN NUMBER,
p_init_msg_list IN VARCHAR2 := FND_API.G_FALSE,
p_commit IN VARCHAR2 := FND_API.G_FALSE,
p_validation_level IN NUMBER := FND_API.G_VALID_LEVEL_FULL,
x_return_status OUT NOCOPY VARCHAR2,
x_msg_count OUT NOCOPY NUMBER,
x_msg_data OUT NOCOPY VARCHAR2,
p_dm_model_rec IN DM_MODEL_Rec_Type,
x_object_version_number OUT NOCOPY NUMBER)
IS
l_api_name CONSTANT VARCHAR2(30) := 'Update_dm_model';
SELECT system_status_code
FROM ams_user_statuses_vl
WHERE user_status_id = p_user_status_id;
SELECT *
FROM ams_dm_models_vl
WHERE model_id = p_model_id
;
l_selections_changed_flag VARCHAR2(1);
SAVEPOINT UPDATE_DM_MODEL_PVT;
l_selections_changed_flag := 'N';
AMS_UTILITY_PVT.debug_message('Private API: ' || l_api_name || ' No Data Selections to Build');
AMS_UTILITY_PVT.debug_message('Private API: ' || l_api_name || ' No Data Selections to Build');
AMS_UTILITY_PVT.debug_message('Private API: ' || l_api_name || ' No Data Selections to Build');
AMS_UTILITY_PVT.debug_message('Private API: ' || l_api_name || ' No Data Selections to Build');
l_selections_changed_flag);
IF l_selections_changed_flag = 'Y' THEN
l_tar_model_rec.status_code := G_MODEL_STATUS_INVALID;
p_validation_mode => jtf_plsql_api.g_update,
p_dm_model_rec => l_tar_model_rec,
x_return_status => x_return_status,
x_msg_count => x_msg_count,
x_msg_data => x_msg_data);
AMS_UTILITY_PVT.debug_message('Private API: Calling update table handler');
AMS_DM_MODELS_B_PKG.Update_Row(
p_model_id => l_tar_model_rec.model_id,
p_last_update_date => sysdate,
p_last_updated_by => FND_GLOBAL.USER_ID,
p_last_update_login => FND_GLOBAL.CONC_LOGIN_ID,
p_object_version_number => l_tar_model_rec.object_version_number,
p_model_type => l_tar_model_rec.model_type,
p_user_status_id => l_tar_model_rec.user_status_id,
p_status_code => l_tar_model_rec.status_code,
p_status_date => l_tar_model_rec.status_date,
p_last_build_date => l_tar_model_rec.last_build_date,
p_owner_user_id => l_tar_model_rec.owner_user_id,
p_performance => l_tar_model_rec.performance,
p_target_group_type => l_tar_model_rec.target_group_type,
p_darwin_model_ref => l_tar_model_rec.darwin_model_ref,
p_model_name => l_tar_model_rec.model_name,
p_description => l_tar_model_rec.description,
p_scheduled_date =>l_tar_model_rec.scheduled_date,
p_scheduled_timezone_id =>l_tar_model_rec.scheduled_timezone_id,
p_expiration_date => l_tar_model_rec.expiration_date,
p_results_flag => l_tar_model_rec.results_flag,
p_LOGS_FLAG => l_tar_model_rec.LOGS_FLAG,
p_TARGET_FIELD => l_tar_model_rec.TARGET_FIELD,
p_TARGET_TYPE => l_tar_model_rec.TARGET_TYPE,
p_TARGET_POSITIVE_VALUE => l_tar_model_rec.TARGET_POSITIVE_VALUE,
p_TOTAL_RECORDS => l_tar_model_rec.TOTAL_RECORDS,
p_TOTAL_POSITIVES => l_tar_model_rec.TOTAL_POSITIVES,
p_MIN_RECORDS => l_tar_model_rec.MIN_RECORDS,
p_MAX_RECORDS => l_tar_model_rec.MAX_RECORDS,
p_row_selection_type => l_tar_model_rec.row_selection_type,
p_EVERY_NTH_ROW => l_tar_model_rec.EVERY_NTH_ROW,
p_PCT_RANDOM => l_tar_model_rec.PCT_RANDOM,
p_best_subtree => l_tar_model_rec.best_subtree,
p_custom_setup_id => l_tar_model_rec.custom_setup_id,
p_country_id => l_tar_model_rec.country_id,
p_wf_itemkey => l_tar_model_rec.wf_itemkey,
p_target_id => l_tar_model_rec.target_id,
p_attribute_category => l_tar_model_rec.attribute_category,
p_attribute1 => l_tar_model_rec.attribute1,
p_attribute2 => l_tar_model_rec.attribute2,
p_attribute3 => l_tar_model_rec.attribute3,
p_attribute4 => l_tar_model_rec.attribute4,
p_attribute5 => l_tar_model_rec.attribute5,
p_attribute6 => l_tar_model_rec.attribute6,
p_attribute7 => l_tar_model_rec.attribute7,
p_attribute8 => l_tar_model_rec.attribute8,
p_attribute9 => l_tar_model_rec.attribute9,
p_attribute10 => l_tar_model_rec.attribute10,
p_attribute11 => l_tar_model_rec.attribute11,
p_attribute12 => l_tar_model_rec.attribute12,
p_attribute13 => l_tar_model_rec.attribute13,
p_attribute14 => l_tar_model_rec.attribute14,
p_attribute15 => l_tar_model_rec.attribute15
);
AMS_Access_PVT.update_object_owner (
p_api_version => 1.0,
p_init_msg_list => FND_API.G_FALSE,
p_commit => FND_API.G_FALSE,
p_validation_level => p_validation_level,
x_return_status => x_return_status,
x_msg_count => x_msg_count,
x_msg_data => x_msg_data,
p_object_type => 'MODL',
p_object_id => l_tar_model_rec.model_id,
p_resource_id => l_tar_model_rec.owner_user_id,
p_old_resource_id => l_ref_model_rec.owner_user_id
);
ROLLBACK TO UPDATE_DM_MODEL_PVT;
ROLLBACK TO UPDATE_DM_MODEL_PVT;
ROLLBACK TO UPDATE_DM_MODEL_PVT;
End Update_dm_model;
PROCEDURE Delete_dm_model(
p_api_version_number IN NUMBER,
p_init_msg_list IN VARCHAR2 := FND_API.G_FALSE,
p_commit IN VARCHAR2 := FND_API.G_FALSE,
p_validation_level IN NUMBER := FND_API.G_VALID_LEVEL_FULL,
x_return_status OUT NOCOPY VARCHAR2,
x_msg_count OUT NOCOPY NUMBER,
x_msg_data OUT NOCOPY VARCHAR2,
p_model_id IN NUMBER,
p_object_version_number IN NUMBER
)
IS
l_api_name CONSTANT VARCHAR2(30) := 'Delete_dm_model';
SAVEPOINT DELETE_DM_MODEL_PVT;
AMS_UTILITY_PVT.debug_message( 'Private API: Calling delete table handler');
AMS_DM_MODELS_B_PKG.Delete_Row(p_model_id => p_model_id);
ROLLBACK TO DELETE_DM_MODEL_PVT;
ROLLBACK TO DELETE_DM_MODEL_PVT;
ROLLBACK TO DELETE_DM_MODEL_PVT;
End Delete_dm_model;
IS SELECT 1 from dual
WHERE EXISTS ( SELECT * from ams_dm_models_all_tl
WHERE UPPER(model_name) = UPPER(p_dm_model_rec.model_name) and LANGUAGE = userenv('LANG')) ;
IS SELECT 1 from dual
WHERE EXISTS ( SELECT * from ams_dm_models_vl
WHERE UPPER(model_name) = UPPER(p_dm_model_rec.model_name)
AND model_id <> p_DM_MODEL_rec.model_id );
IF (p_validation_mode = jtf_plsql_api.g_update) THEN
IF (AMS_DEBUG_HIGH_ON) THEN
ams_utility_pvt.debug_message('Private API:check_dm_model_req_items for update');
IF p_dm_model_rec.row_selection_type IS NULL THEN
IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.g_msg_lvl_error) THEN
FND_MESSAGE.set_name('AMS', 'AMS_MODEL_NO_ROW_SELECT_TYPE');
SELECT owner_user_id
FROM ams_dm_models_all_b
WHERE model_id = p_model_id;
IF p_validation_mode = JTF_PLSQL_API.G_UPDATE THEN
l_context_resource_id := AMS_Utility_PVT.get_resource_id(FND_GLOBAL.user_id);
IF p_dm_model_rec.row_selection_type = 'NTH_RECORD' THEN
IF p_dm_model_rec.every_nth_row IS NULL OR
p_dm_model_rec.every_nth_row = FND_API.g_miss_num THEN
AMS_Utility_PVT.error_message ('AMS_DM_NO_NTH_RECORD');
IF p_dm_model_rec.row_selection_type = 'RANDOM' THEN
IF p_dm_model_rec.pct_random IS NULL OR
p_dm_model_rec.pct_random = FND_API.g_miss_num THEN
AMS_Utility_PVT.error_message ('AMS_DM_NO_PCT_RANDOM');
SELECT *
FROM ams_dm_models_vl
WHERE model_id = p_dm_model_rec.model_id
;
IF p_dm_model_rec.last_update_date = FND_API.g_miss_date THEN
x_complete_rec.last_update_date := l_model_rec.last_update_date;
IF p_dm_model_rec.last_updated_by = FND_API.g_miss_num THEN
x_complete_rec.last_updated_by := l_model_rec.last_updated_by;
IF p_dm_model_rec.last_update_login = FND_API.g_miss_num THEN
x_complete_rec.last_update_login := l_model_rec.last_update_login;
IF p_dm_model_rec.row_selection_type = FND_API.g_miss_char THEN
x_complete_rec.row_selection_type := l_model_rec.row_selection_type;
IF AMS_Access_PVT.check_update_access (
p_object_id => p_model_rec.model_id,
p_object_type => L_MODEL_QUALIFIER,
p_user_or_role_id => l_owner_user_id,
p_user_or_role_type => L_ACCESS_TYPE_USER) = 'N' THEN
AMS_Utility_PVT.error_message ('AMS_MODEL_NO_UPDATE_ACCESS');
SELECT model_id, status_code
FROM ams_dm_models_all_b
WHERE status_code <> 'EXPIRED'
AND expiration_date <= SYSDATE
;
SELECT user_status_id
FROM ams_user_statuses_b
WHERE system_status_type = G_MODEL_STATUS_TYPE
AND system_status_code = G_MODEL_STATUS_EXPIRED
;
UPDATE ams_dm_models_all_b
SET user_status_id = l_new_status_id
, status_code = G_MODEL_STATUS_EXPIRED
, status_date = SYSDATE
, object_version_number = object_version_number + 1
, last_update_date = SYSDATE
, last_updated_by = FND_GLOBAL.user_id
WHERE model_id = l_expired_models_rec.model_id;
UPDATE ams_dm_models_all_b
SET last_update_date = SYSDATE
, last_updated_by = FND_GLOBAL.user_id
, last_update_login = FND_GLOBAL.conc_login_id
, object_version_number = object_version_number + 1
, status_code = p_status_code
, user_status_id = l_user_status_id
, status_date = SYSDATE
WHERE model_id = p_model_id;
UPDATE ams_dm_models_all_b
SET object_version_number = object_version_number + 1
, last_update_date = SYSDATE
, last_updated_by = FND_GLOBAL.user_id
, status_date = SYSDATE
, status_code = G_MODEL_STATUS_AVAILABLE
, user_status_id = l_user_status_id
WHERE model_id = p_model_id;
UPDATE ams_dm_models_all_b
SET object_version_number = object_version_number + 1
, last_update_date = SYSDATE
, last_updated_by = FND_GLOBAL.user_id
, status_date = SYSDATE
, status_code = p_status_code
, user_status_id = l_user_status_id
, last_build_date = SYSDATE
, results_flag = 'Y'
WHERE model_id = p_model_id;
SELECT *
FROM ams_dm_models_vl
WHERE model_id = p_model_id
;
UPDATE ams_dm_models_all_b
SET object_version_number = object_version_number + 1,
last_update_date = SYSDATE,
last_updated_by = FND_GLOBAL.user_id,
status_date = SYSDATE,
status_code = l_ref_model_rec.status_code,
user_status_id = l_ref_model_rec.user_status_id,
wf_itemkey = l_ref_model_rec.wf_itemkey,
results_flag = l_ref_model_rec.results_flag
WHERE model_id = p_model_id;
SELECT *
FROM ams_dm_models_vl
WHERE model_id = p_model_id
;
SELECT target_id from ams_dm_models_vl
WHERE model_id = p_model_id
;
IF AMS_Access_PVT.check_update_access (
p_object_id => p_model_id,
p_object_type => L_MODEL_QUALIFIER,
p_user_or_role_id => l_owner_user_id,
p_user_or_role_type => L_ACCESS_TYPE_USER) = 'N' THEN
x_return_status := 'A';
AMS_UTILITY_PVT.debug_message('Private API: ' || l_api_name || ' No Data Selections to Preview');
UPDATE ams_dm_models_all_b
SET logs_flag = 'Y',
object_version_number = object_version_number + 1,
last_update_date = SYSDATE,
last_updated_by = FND_GLOBAL.user_id,
status_date = SYSDATE,
status_code = l_tar_model_rec.status_code,
user_status_id = l_tar_model_rec.user_status_id,
wf_itemkey = l_tar_model_rec.wf_itemkey
WHERE model_id = p_model_id;
SELECT *
FROM ams_dm_models_vl
WHERE model_id = p_model_id
;
SELECT t.DATA_SOURCE_ID
FROM ams_dm_models_all_b m,ams_dm_targets_b t
WHERE m.model_id = p_model_id
AND m.target_id = t.target_id
;
l_model_rec.row_selection_type := l_reference_rec.row_selection_type;
IF l_model_rec.row_selection_type = 'NTH_RECORD' THEN
l_model_rec.every_nth_row := l_reference_rec.every_nth_row;
IF l_model_rec.row_selection_type = 'RANDOM' THEN
l_model_rec.pct_random := l_reference_rec.pct_random;
AMS_CopyElements_PVT.copy_list_select_actions (
p_api_version => 1.0,
p_init_msg_list => FND_API.G_FALSE,
p_commit => FND_API.G_FALSE,
x_return_status => x_return_status,
x_msg_count => x_msg_count,
x_msg_data => x_msg_data,
p_object_type => G_OBJECT_TYPE_MODEL,
p_src_object_id => p_source_object_id,
p_tar_object_id => l_new_model_id
);
UPDATE ams_dm_models_all_b
SET last_update_date = SYSDATE
, last_updated_by = FND_GLOBAL.user_id
, last_update_login = FND_GLOBAL.conc_login_id
, object_version_number = object_version_number + 1
, status_code = G_MODEL_STATUS_BUILDING
, user_status_id = l_user_status_id
, status_date = SYSDATE
WHERE model_id = p_model_id;
p_select_list => NULL,
x_itemkey => x_tar_model_rec.wf_itemkey
);
p_select_list => NULL,
x_itemkey => x_tar_model_rec.wf_itemkey
);
delete /*+ index(AMS_DM_SOURCE AMS_DM_SOURCE_U2) */ from ams_dm_source
where arc_used_for_object = 'MODL'
and used_for_object_id = p_MODEL_ID;
DELETE FROM ams_dm_performance
WHERE MODEL_ID = p_MODEL_ID;
DELETE FROM ams_dm_lift
WHERE MODEL_ID = p_MODEL_ID;
DELETE FROM ams_dm_imp_attributes
WHERE MODEL_ID = p_MODEL_ID;
UPDATE ams_dm_models_all_b
SET results_flag = 'N'
WHERE MODEL_ID = p_MODEL_ID;
SELECT status_code, user_status_id
FROM ams_dm_models_vl
WHERE model_id = p_model_id
;
l_data_selections_count NUMBER;
l_prod_selections_count NUMBER;
CURSOR l_dataSelectionsExist (p_model_id IN NUMBER) IS
SELECT count(*)
FROM ams_list_select_actions
WHERE arc_action_used_by = 'MODL'
AND action_used_by_id = p_model_id;
SELECT m.model_type
FROM ams_dm_models_all_b m
WHERE m.model_id = p_model_id
;
CURSOR c_prodSelectionExist(p_model_id IN NUMBER) IS
SELECT count(*)
FROM ams_act_products
WHERE arc_act_product_used_by = 'MODL'
AND act_product_used_by_id = p_model_id;
l_data_selections_count := 0;
OPEN l_dataSelectionsExist (p_model_id);
FETCH l_dataSelectionsExist INTO l_data_selections_count;
CLOSE l_dataSelectionsExist;
IF l_data_selections_count IS NULL or l_data_selections_count = 0 THEN
x_data_exists_flag := 'N';
OPEN c_prodSelectionExist(p_model_id);
FETCH c_prodSelectionExist into l_prod_selections_count;
CLOSE c_prodSelectionExist;
IF l_prod_selections_count IS NULL or l_prod_selections_count = 0 THEN
x_data_exists_flag := 'N';
SELECT target_id
FROM ams_dm_models_all_b
WHERE model_id = p_model_id;
x_selections_changed_flag OUT NOCOPY VARCHAR2
)
IS
L_API_NAME CONSTANT VARCHAR2(30) := 'check_data_size_changes';
SELECT *
FROM ams_dm_models_vl
WHERE model_id = p_model_id
;
x_selections_changed_flag := 'N';
x_selections_changed_flag := 'Y';
x_selections_changed_flag := 'Y';
IF (l_ref_model_rec.row_selection_type IS NULL AND p_input_model_rec.row_selection_type IS NOT NULL) OR
(l_ref_model_rec.row_selection_type <> p_input_model_rec.row_selection_type) THEN
x_selections_changed_flag := 'Y';
x_selections_changed_flag := 'Y';
x_selections_changed_flag := 'Y';
AMS_UTILITY_PVT.debug_message('Private API: ' || l_api_name || ' End. Selections Changed Flag = ' || x_selections_changed_flag);
PROCEDURE handle_data_selection_changes(
p_model_id IN NUMBER
)
IS
L_API_NAME CONSTANT VARCHAR2(30) := 'handle_data_selection_changes';
SELECT *
FROM ams_dm_models_vl
WHERE model_id = p_model_id
;
UPDATE ams_dm_models_all_b
SET last_update_date = SYSDATE,
last_updated_by = FND_GLOBAL.user_id,
status_date = SYSDATE,
status_code = G_MODEL_STATUS_INVALID,
user_status_id = l_status_id
WHERE model_id = p_model_id;
END handle_data_selection_changes;
SELECT m.model_id, m.status_code
FROM ams_dm_models_all_b m, ams_dm_targets_b t
WHERE m.target_id = t.target_id
AND t.data_source_id = p_datasource_id
UNION
SELECT m.model_id, m.status_code
FROM ams_dm_models_all_b m, ams_dm_targets_b t, ams_dm_target_sources s
WHERE m.target_id = t.target_id
AND s.target_id = t.target_id
AND s.data_source_id = p_datasource_id;
UPDATE ams_dm_models_all_b
SET object_version_number = object_version_number + 1,
last_update_date = SYSDATE,
last_updated_by = FND_GLOBAL.user_id,
status_date = SYSDATE,
status_code = G_MODEL_STATUS_INVALID,
user_status_id = l_status_id
WHERE model_id = l_models.model_id;