2012-08-15 54 views
0

我想修改下面的過程以1:2; 3的形式發送數據。在下面的過程中,我發送數據1,然後檢查數據是否是有效數字然後我查詢到某個表並獲取數據。我無法修改發送以分號分隔的數據的過程,並檢查數據是否爲數字,這裏p_in_field_value應該像1; 2; 3那樣應該傳遞給下面的函數。將分號分隔的數據傳遞給函數

FUNCTION p_get_option_value(p_in_field_value IN VARCHAR2) RETURN VARCHAR2 IS 
    v_is_number boolean; 
    v_count number; 
    v_option_val VARCHAR2(300); 
    begin 
    v_is_number := pkg_trial.f_check_value_numeric(p_in_field_value); 
     IF (v_is_number = TRUE) THEN 
            select count(id) into v_count from t_field_option where field_option_id=p_in_field_value; 
      if(v_count >=1) THEN 
      v_option_val:= pkg_form_common.f_option_values(p_in_field_value); 
      return v_option_val; 
      else 
      return p_in_field_value; 
        END IF; 

     ELSE 
     return p_in_field_value; 
     END IF; 

FUNCTION f_check_value_numeric(p_in_field_value IN VARCHAR2) RETURN BOOLEAN IS 
    v_is_number number; 
    begin 
    v_is_number := to_number(p_in_field_value); 
     return TRUE; 
    exception 
     when others then 
     return FALSE; 

    END f_check_value_numeric; 

請讓我知道如何執行此操作?

+0

能否請您檢查您的拼寫錯誤的描述,並在一些細節你想要什麼添加從函數返回? – moleboy 2012-08-15 13:23:21

+0

[PL/SQL是否有與Java的StringTokenizer相同的?](http://stackoverflow.com/questions/1520733/does-pl-sql-have-an-equivalent-stringtokenizer-to-javas) – APC 2012-08-15 13:29:40

回答

0

不知道應該如何計算v_option_val的價值,但你可以分割分號分隔的數據如下:

FUNCTION p_get_option_value(p_in_field_value IN VARCHAR2) RETURN VARCHAR2 IS 
    v_is_number boolean; 
    v_count number; 
    v_option_val VARCHAR2(300); 
    v_pos  NUMBER; 
    v_in_field_valid VARCHAR2(4000); 
    v_val  VARCHAR2(4000); 
BEGIN 
    v_in_field_valid := p_in_field_value; 

    WHILE v_in_field_valid IS NOT NULL 
    LOOP 

     v_pos := instr(v_in_field_valid, ';'); 
     IF v_pos = 0 THEN 
     v_val := v_in_field_valid; 
     v_insurance_value := NULL; 
     ELSE 
     v_val := SUBSTR(v_in_field_valid, 1, v_pos -1); 
     v_in_field_valid := substr(v_str, v_pos + 1); 
     END IF; 

     v_is_number := pkg_trial.f_check_value_numeric(v_val); 
     IF (v_is_number = TRUE) THEN 
            select count(id) into v_count from t_field_option where field_option_id=v_val; 
      if(v_count >=1) THEN 
      v_option_val:= v_option_val || pkg_form_common.f_option_values(v_val); 
    END LOOP 
    return p_in_field_value; 
    END;