У меня есть процедура Что такое обновление моих клиентов с данными из другой таблицы. И некоторые клиенты не обновляются по причине отказа одного из своих значений.как проверить значение перед обновлением в процедуре plsql
Это ошибка, которая вызывает: ORA - 12899: значение слишком велико для столбца «TABLE_EXAMPLE» «BRANCH_CODE» (текущий: 3, максимум: 2).
И теперь это процедура:
PROCEDURE p_update_customers AS
CURSOR customer_data IS
SELECT a.code_cust code_cust,
'0' || a.branch_code branch_code,
a.costumer_id,
a.name name,
b.description
FROM customer a, description b
WHERE a.costumer_id = b.costumer_id;
reg_customer_data customer_data%ROWTYPE;
BEGIN
BEGIN
OPEN customer_data;
LOOP
FETCH customer_data
INTO reg_customer_data;
EXIT WHEN customer_data%NOTFOUND;
BEGIN
Я думаю, что в этой части я должен проверить ветвь кода с помощью IF или CASE-заявления. Мне нужны только две последние цифры значения. (Между BEGIN и UPDATE).
UPDATE table_example
SET code_cust = reg_customer_data.code_cust,
branch_code = reg_customer_data.branch_code,
costumer_id = reg_customer_data.costumer_id,
name = reg_customer_data.name,
description = reg_customer_data.description
WHERE code_cust = reg_customer_data.code_cust;
END;
END LOOP;
END;
END p_update_customers;
Таким образом, мне нужно проверить branch_code перед обновлением, потому что мне нужно только две последние цифры (09 или 58).
costumer_id name branch_code
1 jose 09
2 peter 09
3 jhon 09
4 charlie 058
Если branch_code имеет 3 цифры, удалить первый и передать значение 2 цифры, а затем продолжить обновление.
Примечание: я не могу изменить или удалить конкат, который я использую в курсоре: CUSTOMER_DATA, потому что BRANCH_CODE на TABLE_EXAMPLE должен быть двухзначным.
Благодарим за вашу помощь, но косяк Прикоснитесь к CUSTOMER_DATA курсора. – spikeTJ
@harsd - см. Добавление к моему ответу, которое изменяет 'UPDATE' и оставляет курсор в покое; надеюсь, что это сработает для вас. –