Oracle
 sql >> Baza danych >  >> RDS >> Oracle

hsqldb Wybór trybu Oracle do aktualizacji NOWIT

W końcu znalazłem odpowiedź na moje własne pytanie po wykopaniu kodu źródłowego hsqldb na sourceforge.

Wersja 2.3.3 HSQLDB NIE obsługuje NOWAIT.

Zadałem to pytanie na ich forum dyskusyjnym i podniosłem ten problem, ale nie jest to podobne do GitHub, w którym można utworzyć problem, więc nie jest otwarty żaden formalny problem/żądanie.

Na razie dogaduję się ze złym hackiem, modyfikując HSQLDB kod sam org.hsqldb.ParserDQL klasy, aby po prostu zignorować NOWAIT w SQL-u wyboru do aktualizacji.

Jeśli ktoś ma lepszą odpowiedź, zaakceptuję jego odpowiedź.

AKTUALIZACJA:(24 sierpnia 2015)

Otrzymałem potwierdzenie z forum HSQLDB, że NOWAIT zostanie zignorowany. W międzyczasie zamieszczam fragment kodu, aby zignorować NOWAIT, który otrzymałem z forum Sourceforge HSQLDB. Możesz poczekać na następną wersję HSQLDB, niż dodać ją do swojej bazy kodu (jako hack).

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

AKTUALIZACJA, aby pokazać pełny kontekst, gdzie dodać powyższy fragment kodu w ParserDQL.java

    /**
 * 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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Wyświetlacze PL/SQL Developer nie wyświetlają poprawnie znaków hebrajskich

  2. Oracle Text nie będzie działać z NVARCHAR2. Co jeszcze może być niedostępne?

  3. Linq to Entities Group By (OUTER APPLY) oracle 11.2.0.3.0 nie obsługuje zastosowania

  4. Biblioteka zarządzana ODP.NET rozpoznaje alias, ale biblioteka 32-bitowa nie

  5. Wyklucz pozycje zgodnie z zapisem