sql >> Database >  >> RDS >> Oracle

hsqldb Oracle-modus selecteren voor update NU

Eindelijk antwoord gevonden op mijn eigen vraag na het graven van hsqldb-broncode op sourceforge.

Versie 2.3.3 van HSQLDB ondersteunt NOWAIT NIET.

Ik heb deze vraag gesteld in hun discussieforum en het probleem aan de orde gesteld, maar het is niet zoals GitHub waar je een probleem kunt maken, dus er wordt geen formeel probleem/verzoek geopend.

Ik kan opschieten met een slechte hack voor het wijzigen van HSQLDB code mezelf org.hsqldb.ParserDQL class om de NOWAIT in de select-for-update SQL gewoon te negeren.

Als iemand een beter antwoord heeft, zal ik hun antwoord accepteren.

UPDATE:(24-aug-2015)

Bevestiging ontvangen van het HSQLDB-forum dat NOWAIT wordt genegeerd. Ondertussen plaats ik het codefragment om NOWAIT te negeren dat ik heb ontvangen van het HSQLDB sourceforge-forum. Misschien wilt u wachten op de volgende versie van HSQLDB dan deze aan uw codebasis toe te voegen (als een hack).

 if (Tokens.T_NOWAIT.equals(token.tokenString)) {
        read();
 }

BIJGEWERKT om de volledige context te tonen over waar het bovenstaande fragment in de ParserDQL.java moet worden toegevoegd

    /**
 * Retrieves a SELECT or other query expression Statement from this parse context.
 */
StatementQuery compileCursorSpecification(RangeGroup[] rangeGroups,
        int props, boolean isRoutine) {

    OrderedHashSet  colNames        = null;
    QueryExpression queryExpression = XreadQueryExpression();

    if (token.tokenType == Tokens.FOR) {
        read();

        if (token.tokenType == Tokens.READ
                || token.tokenType == Tokens.FETCH) {
            read();
            readThis(Tokens.ONLY);

            props = ResultProperties.addUpdatable(props, false);
        } else {
            readThis(Tokens.UPDATE);

            props = ResultProperties.addUpdatable(props, true);

            if (token.tokenType == Tokens.OF) {
                readThis(Tokens.OF);

                colNames = new OrderedHashSet();

                readColumnNameList(colNames, null, false);
            }
            if (Tokens.T_NOWAIT.equalsIgnoreCase(token.tokenString)) {
                readIfThis(Tokens.X_IDENTIFIER);
            }
        }
    }



  1. voordeel van het gebruik van een trigger om surrogaatsleutel te vullen in oracle plsql

  2. Selecteer met dynamisch gegenereerde tabelnaam

  3. ORDER en GROUP gebruiken met MySQL om het hoogste nummer voor elke GROUP te krijgen

  4. Hoe krijg ik in SQL de maximale waarde voor een geheel getal?