2014-10-19 39 views
1

我有一個插槽號碼,如slot001。現在我必須增加一些user_input的值(比如5)。輸出應該是:如何在oracle中增加具有數字字段的字符串?

slot001 
slot002 
slot003 
slot004 
slot005 

我曾嘗試寫一段代碼,但它無法slot001slot1區分。字符串長度不固定,但是它將是字數格式。

我的方法:

CREATE OR REPLACE PROCEDURE Pr_procedure_poc 
(
    slot_numin IN VARCHAR2, 
    range_countin IN NUMBER 
) is 
v_slt_num  NUMBER; 
v_slot  VARCHAR2(100) := slot_numin; 
v_slt_var  VARCHAR2(100); 
v_temp  VARCHAR2(100); 

begin 
     SELECT Regexp_substr(slot_numin, '\d+') 
     INTO v_slt_num 
     FROM dual; 

     SELECT Regexp_substr(slot_numin, '\D+') 
     INTO v_slt_var 
     FROM dual; 

FOR i IN 0 .. (range_countin -1) LOOP --range_countin :=user input to increament the string 

v_temp := v_slt_num + i; 
v_slot := v_slt_var||v_temp; 

end loop; 

end 
Pr_procedure_poc; 

輸出slot_numin = 'ABC001' 和範圍= 10:

abc1 
abc2 
abc3 
abc4 
abc5 
abc6 
abc7 
abc8 
abc9 
abc10 

輸出slot_numin = 'ABC1' 和範圍= 10:

abc1 
abc2 
abc3 
abc4 
abc5 
abc6 
abc7 
abc8 
abc9 
abc10 

預期輸出: slot_numin ='abc001'的輸出和範圍= 10:

ABC001

abc002 
abc003 
abc004 
abc005 
abc006 
abc007 
abc008 
abc009 
abc010 

輸出slot_numin = 'ABC1' 和範圍= 10:

abc1 
abc2 
abc3 
abc4 
abc5 
abc6 
abc7 
abc8 
abc9 
abc10 

回答

0

擴展你的正則表達式查找是否有前導零與否,如果是,則使用與領先的格式零點在to_char()功能:

v_temp := to_char(v_slt_num + i, 'fm09999'); 
0

擴大在生鏽的答案很簡單:

declare 
    slot_numin varchar2(100) := 'slot0001'; 
    varpart varchar2(100) := regexp_substr(slot_numin, '\D+'); 
    numpart varchar2(100) := regexp_substr(slot_numin, '\d+'); 
    digits  number := length(numpart); 
begin 
    for i in 1..9 loop 
    dbms_output.put_line(
    varpart 
    || to_char((to_number(numpart) + i),'fm'||rpad('0',digits,'0')) 
    ); 
    end loop; 
end; 

結果:

slot0002 
slot0003 
slot0004 
slot0005 
slot0006 
slot0007 
slot0008 
slot0009 
slot0010 
相關問題