我有一个过程用另一个表中的数据更新我的客户端。而有些客户不会因其某个价值的失败而更新。如何在过程更新之前测试一个值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之间)。因此,我需要在更新之前测试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位数值,稍后继续更新。
注意:我不能更改或删除我在游标中使用的concat:CUSTOMER_DATA,因为TABLE_EXAMPLE上的BRANCH_CODE它必须是两位数。
感谢你的帮助,但斜面触摸CUSTOMER_DATA光标。 – spikeTJ 2015-02-05 20:06:05
@harsd - 查看我答案的附录,它改变了'UPDATE'并且保持光标不变;希望对你有效。 – 2015-02-05 23:28:58