sql >> Database teknologi >  >> RDS >> Oracle

Hvordan udfører man række for række validering på en Oracle APEX tabelformular ved hjælp af Ajax?

Hvordan jeg ville prøve at løse det. Bemærk, at dette ikke dækker alle (enhver?) eventualitet eller meget fejlhåndtering. Du skal selv uddybe det lidt. Jeg brugte f.eks. input til en vælger, du skal bruge "vælg". Arrays matcher muligvis ikke. Du har muligvis brug for en helt anden vælger, såsom af td[headers]. Måske skal dit returobjekt indeholde andre eller flere værdier. Dine js skal muligvis udvides.
Alligevel burde det give dig en god base at starte fra!

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!');
        };
      });

      }
  } );
}

On-demand plsql-proces:

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. SELECT-forespørgsel med bogstavelige tegn (kolon, semikolon) i Oracle

  2. TINYTEXT, TEXT, MEDIUMTEXT og LONGTEXT maksimale lagerstørrelser

  3. Hvordan bruger man felt fra underforespørgsel i MySQL?

  4. Sådan viser du de forældede funktioner i en SQL Server-instans ved hjælp af T-SQL