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;

これを実行する方法を教えてください。

4

1 に答える 1

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;
于 2012-08-15T13:22:10.487 に答える