sql >> データベース >  >> RDS >> Oracle

Ajaxを使用してOracle APEX表形式フォームで行ごとの検証を実行する方法は?

    どのように私はそれを解決しようとしますか。これは、すべての (何か?) 偶発性や多くのエラー処理をカバーしていないことに注意してください。自分で少し詳しく説明する必要があります。たとえば、セレクターに入力を使用した場合は、「select」が必要です。配列が一致しない場合があります。 td[headers] など、まったく別のセレクターが必要になる場合があります。おそらく、戻りオブジェクトは他の値またはそれ以上の値を保持する必要があります。あなたの js はさらに拡張する必要があるかもしれません.
    それでも、開始するための良いベースを提供するはずです.

    Javascript:

    function validaterows(){
      var arrf01 = [], arrf02 = [];
    
      //fetch all the values from the source columns and put them in
      //a javascript array.
      $("input[name=f03]").each(function(){
        arrf01.push($v(this));
      });
    
      $("input[name=f04]").each(function(){
        arrf02.push($v(this));
      });
    
      //provide the constructed arrays to the on-demand process by using
      //the global f## arrays
      apex.server.process ( "MY_PROCESS", {
          f01: arrf01
        , f02: arrf02
      }, {
      , success: function( pData ) { 
          //pData should be an object, because jquery will have parsed the returned json-string
          apex.debug(pData);
    
          $.each(pData.validationArray, function(index, value){
            if ( value === 'INVALID' ) {
              // do something here when the result is invalid
              // maybe you want to color something red for example
              alert('The data at row '+index+' is not valid!');
            };
          });
    
          }
      } );
    }
    

    オンデマンド plsql プロセス:

    DECLARE
      l_return VARCHAR2(4000);
    BEGIN
      FOR i IN apex_application.g_f01.count
      LOOP
        -- remember: the f## arrays are varchar arrays. Important for comparisons.
        -- Also take into account that the values could NOT be numeric at all.
        -- you'll probably want to run each value through an is-number check or else 
        -- you'll run into ORA errors
        IF to_number(apex_application.g_f01(i)) > to_number(apex_application.g_f02(i))
        THEN
          l_return := l_return || ',"INVALID"';
        ELSE
          l_return := l_return || ',"VALID"';
        END IF;
      END LOOP;
    
      IF l_return IS NOT NULL
      THEN
        -- create a json string 
        -- holds an object with 1 property (validationArray) with the value being
        -- an array holding a value for each row submitted
        l_return := '{"validationArray":['||LTRIM(l_return, ',')||']}';
      END IF;
    
      -- write the output to the buffer
      htp.p(l_return);
    END;
    



    1. 空のテーブルのMAX()をNULLではなく0として扱う方法

    2. SQL:別のテーブルの列値に基づいて列を選択する

    3. ある SQL Server データベース テーブルから別のデータベース テーブルにデータベース テーブルを更新しますか?

    4. 無効な列名のSQLエラー