Primäre Ausdrücke in SQL verwenden

Wenn Sie zusammen mit den Beispielen folgen möchten, lesen Sie Beispieldaten zum Ausführen von Abfragen, um Beispieldaten anzuzeigen. Außerdem erfahren Sie, wie Sie mit der OCI-Konsole die Beispieltabellen erstellen und Daten mit JSON-Dateien laden.

Ausdrücke in Klammern

In Klammern stehende Ausdrücke werden hauptsächlich verwendet, um die Standardpriorität zwischen Operatoren zu ändern. Sie werden auch als syntaktische Hilfe verwendet, um Ausdrücke auf eine Weise zu mischen, die sonst syntaktische Mehrdeutigkeiten verursachen würde.

Beispiel: Rufen Sie den vollständigen Namen, die Tag-Nummer und die Routing-Details von Passagieren ab, die bei JFK/Traversing über JFK einsteigen, und ihr Ziel ist entweder MAD oder VIE.

SELECT fullName, bag.bagInfo.tagNum,
bag.bagInfo.routing,
bag.bagInfo[].flightLegs[].fltRouteDest
FROM BaggageInfo bag
WHERE bag.bagInfo.flightLegs[].fltRouteSrc=any "JFK" AND
(bag.bagInfo[].flightLegs[].fltRouteDest=any "MAD" OR
bag.bagInfo[].flightLegs[].fltRouteDest=any "VIE" )

Erläuterung: Sie möchten den vollständigen Namen, die Tag-Nummer und die Weiterleitungsdetails der Passagiere abrufen. Die erste Filterbedingung ist, dass der Einstiegspunkt/Transit JFK ist. Sobald dies erfüllt ist, ist die zweite Filterbedingung, dass das Ziel entweder MAD oder VIE ist. Sie verwenden eine ODER-Bedingung, um den Zielwert zu filtern.

Ausgabe:

{"fullName":"Dierdre Amador","tagNum":"17657806240229","routing":"JFK/MAD","fltRouteDest":"MAD"}
{"fullName":"Rosalia Triplett","tagNum":"17657806215913","routing":"JFK/IST/VIE","fltRouteDest":["IST","VIE"]}
{"fullName":"Kendal Biddle","tagNum":"17657806296887","routing":"JFK/IST/VIE","fltRouteDest":["IST","VIE"]}

Case-Ausdrücke

Der gesuchte CASE-Ausdruck ähnelt den if-then-else-Anweisungen traditioneller Programmiersprachen. Es besteht aus einer Reihe von WHEN-THEN-Paaren, gefolgt von einer optionalen ELSE-Klausel am Ende. Jeder WHEN-Ausdruck ist eine Bedingung, d.h. er muss BOOLEAN zurückgeben. Die THEN-Ausdrücke sowie der ELSE-Ausdruck können eine beliebige Elementfolge zurückgeben. Der CASE-Ausdruck wird ausgewertet, indem zuerst die WHEN-Ausdrücke von oben nach unten bis zum ersten ausgewertet werden, der "true" zurückgibt. Wenn der i-th WHEN-Ausdruck true zurückgibt, wird der i-th THEN-Ausdruck ausgewertet und sein Ergebnis ist das Ergebnis des gesamten CASE-Ausdrucks. Wenn kein WHEN-Ausdruck "true" zurückgibt, wird sein Ausdruck ausgewertet, und das Ergebnis ist das Ergebnis des gesamten CASE-Ausdrucks. Andernfalls ist das Ergebnis des CASE-Ausdrucks die leere Sequenz.

Beispiel:

SELECT
    fullName,
    CASE
        WHEN NOT exists bag.bagInfo.flightLegs[0]
        THEN "you have no bag info"
        WHEN NOT exists bag.bagInfo.flightLegs[1]
        THEN "you have one hop"
        WHEN NOT exists bag.bagInfo.flightLegs[2]
        THEN "you have two hops."
        ELSE "you have three hops."
    END AS NUMBER_HOPS
FROM BaggageInfo bag WHERE ticketNo=1762340683564

Erläuterung: Sie möchten mit einer CASE-Anweisung ermitteln, wie viele Transits für den Passagier bagInfo vorhanden sind. Wenn das Array flightLegs keine Elemente enthält, hat der Passagier keine Beuteldaten. Wenn das flightLegs-Array nur ein Element enthält, gibt es nur einen Transitpunkt. Wenn das Array flightLegs zwei Elemente enthält, gibt es zwei Hops. Ansonsten gibt es drei Transitpunkte. Hier geht man davon aus, dass eine Tasche maximal drei Transitpunkte/Hops haben kann.

Ausgabe:

{"fullName":"Mary Watson","NUMBER_HOPS":"you have two hops."}

Beispiel 2: Schreiben Sie eine Abfrage, um das System zu warnen, die tagNum der Passagiere zu aktualisieren, wenn der vorhandene Wert keine Zeichenfolge ist.

SELECT bag.bagInfo[].tagNum,
CASE
   WHEN bag.bagInfo[0].tagNum is of type (NUMBER)
   THEN "Tagnumber is not a STRING. Update the data"
   ELSE "Tagnumber has correct datatype"
   END AS tag_NUM_TYPE
FROM BaggageInfo bag

Erklärung: Die tagNum der Passagiere im Schema bagInfo ist ein STRING-Datentyp. Die Anwendung könnte jedoch versehentlich einen NUMBER-Wert als Wert von tagNum annehmen. Die Abfrage verwendet den Operator "ist vom Typ", um dies zu erfassen, und fordert das System auf, die tagNum zu aktualisieren, wenn der vorhandene Wert keine Zeichenfolge ist.

Ausgabe (aus Gründen der Kürze werden nur wenige Zeilen angezeigt).

{"tagNum":"17657806240001","tag_NUM_TYPE":"Tagnumber has correct datatype"}
{"tagNum":"17657806224224","tag_NUM_TYPE":"Tagnumber has correct datatype"}
{"tagNum":17657806243578,"tag_NUM_TYPE":"Tagnumber is not a STRING. Update the data"}
{"tagNum":"1765780623244","tag_NUM_TYPE":"Tagnumber has correct datatype"}

Cast-Ausdruck

Der Cast-Ausdruck erstellt, wenn möglich, neue Elemente eines bestimmten Zieltyps aus den Elementen seiner Eingabefolge. Beispiel: Eine STRING kann mit dem CAST-Ausdruck in TIMESTAMP(0) konvertiert werden.

Regeln gefolgt von einem CAST-Ausdruck:

Hinweis:

ISO8601 beschreibt eine international akzeptierte Art, Daten, Zeiten und Dauer darzustellen.

Syntax: Datum mit Uhrzeit: JJJJ-MM-TTThh:mm:ss[.s[s[s[s[s]]]]][Z|(+|-)hh:mm]

Dabei gilt:

Beispiel 1: Rufen Sie das Ankunftsdatum der Tasche für den Passagier mit dem Reservierungscode DN3I4Q im TIMESTAMP(3)-Format ab.

SELECT CAST (bag.bagInfo.bagArrivalDate AS Timestamp(3))
AS BAG_ARRIVING_DATE
FROM BaggageInfo bag WHERE bag.confNo=DN3I4Q

Erklärung: Die bagArrivalDate ist eine STRING-Anweisung. Mit CAST konvertieren Sie dieses Feld in ein TIMESTAMP-Format.

Ausgabe:

{"BAG_ARRIVING_DATE":"2019-02-15T21:21:00.000Z"}

Beispiel 2: Rufen Sie den vollständigen Namen und die Tag-Nummer für das gesamte nach 2019 versendete Kundengepäck ab.

SELECT fullName, bag.ticketNo,
bag.bagInfo[].bagArrivalDate
FROM BaggageInfo bag WHERE
exists bag.bagInfo[$element.bagArrivalDate >="2019-01-01T00:00:00"]

Erläuterung: Sie möchten die Details des Gepäcks filtern und anzeigen, das nach 2019 versandt wird. Das Ankunftsdatum der Tasche für jedes Element im flightLegs-Array wird mit dem angegebenen Zeitstempel (2019-01-01T00:00:00) verglichen. Hier ist das Casting implizit, da bagArrivalDate eine STRING ist und direkt mit einem statischen Zeitstempelwert verglichen wird. Eine explizite CAST-Funktion ist nicht erforderlich, wenn ein implizites Casting durchgeführt werden kann. Ihre Daten sollten jedoch das Format YYYY-MM-DDTHH:MI:SS aufweisen. Anschließend prüfen Sie mit der Bedingung EXISTS, ob bagInfo für diese Zeitstempelbedingung vorhanden ist.

Ausgabe:

{"fullName":"Kendal Biddle","ticketNo":1762377974281,"bagArrivalDate":"2019-03-05T12:00:00Z"}
{"fullName":"Lucinda Beckman","ticketNo":1762320569757,"bagArrivalDate":"2019-03-12T15:05:00Z"}
{"fullName":"Adelaide Willard","ticketNo":1762392135540,"bagArrivalDate":"2019-02-15T21:21:00Z"}
{"fullName":"Raymond Griffin","ticketNo":1762399766476,"bagArrivalDate":"2019-02-03T08:09:00Z"}
{"fullName":"Elane Lemons","ticketNo":1762324912391,"bagArrivalDate":"2019-03-15T10:13:00Z"}
{"fullName":"Zina Christenson","ticketNo":1762390789239,"bagArrivalDate":"2019-02-04T10:08:00Z"}
{"fullName":"Zulema Martindale","ticketNo":1762340579411,"bagArrivalDate":"2019-02-25T20:15:00Z"}
{"fullName":"Dierdre Amador","ticketNo":1762376407826,"bagArrivalDate":"2019-03-07T13:51:00Z"}
{"fullName":"Henry Jenkins","ticketNo":176234463813,"bagArrivalDate":"2019-03-02T13:18:00Z"}
{"fullName":"Rosalia Triplett","ticketNo":1762311547917,"bagArrivalDate":"2019-02-12T07:04:00Z"}
{"fullName":"Lorenzo Phil","ticketNo":1762320369957,"bagArrivalDate":["2019-03-12T15:05:00Z","2019-03-12T16:25:00Z"]}
{"fullName":"Gerard Greene","ticketNo":1762341772625,"bagArrivalDate":"2019-03-07T16:01:00Z"}
{"fullName":"Adam Phillips","ticketNo":1762344493810,"bagArrivalDate":"2019-02-01T16:13:00Z"}
{"fullName":"Doris Martin","ticketNo":1762355527825,"bagArrivalDate":"2019-03-22T10:17:00Z"}
{"fullName":"Joanne Diaz","ticketNo":1762383911861,"bagArrivalDate":"2019-02-16T16:13:00Z"}
{"fullName":"Teena Colley","ticketNo":1762357254392,"bagArrivalDate":"2019-02-13T11:15:00Z"}
{"fullName":"Michelle Payne","ticketNo":1762330498104,"bagArrivalDate":"2019-02-02T23:59:00Z"}
{"fullName":"Mary Watson","ticketNo":1762340683564,"bagArrivalDate":"2019-03-14T06:22:00Z"}
{"fullName":"Omar Harvey","ticketNo":1762348904343,"bagArrivalDate":"2019-03-02T16:09:00Z"}
{"fullName":"Fallon Clements","ticketNo":1762350390409,"bagArrivalDate":"2019-02-21T14:08:00Z"}
{"fullName":"Lisbeth Wampler","ticketNo":1762355854464,"bagArrivalDate":"2019-02-10T10:01:00Z"}

Sequenztransformationsausdrücke

Ein Sequenztransformationsausdruck transformiert eine Sequenz in eine andere Sequenz. Syntaktisch sieht es wie eine Funktion aus, deren Name seq_transform lautet. Das erste Argument ist ein Ausdruck, der die zu transformierende Sequenz (die Eingabefolge) generiert, und das zweite Argument ist ein "Mapper"-Ausdruck, der für jedes Element der Eingabefolge berechnet wird. Das Ergebnis des seq_transform-Ausdrucks ist die Verkettung von Sequenzen, die von jeder Auswertung des Mapper-Ausdrucks erzeugt werden. Der Mapper-Ausdruck kann über die Variable $ auf das aktuelle Eingabeelement zugreifen.

Beispiel: Rufen Sie für jede ticketNo ein flaches Array mit allen Aktionen ab, die für das Gepäck dieser ticketNo ausgeführt werden.

SELECT seq_transform(l.bagInfo[],
      seq_transform(
          $sq1.flightLegs[],
          seq_transform(
              $sq2.actions[],
              {
                "at" : $sq3.actionAt,
                "action" : $sq3.actionCode,
                "flightNo" : $sq2.flightNo,
                "tagNum" : $sq1.tagNum
              }
          )
      )
  ) AS actions
FROM baggageInfo l WHERE ticketNo=1762340683564

Erläuterung: Sie können den Sequenztransformationsausdruck zum Transformieren von JSON-Dokumenten verwenden, die in Tabellenzeilen gespeichert sind. In solchen Fällen verwenden Sie häufig mehrere Sequenztransformationsausdrücke, die ineinander verschachtelt sind. Hier muss der Mapper-Ausdruck einer inneren Sequenztransformation möglicherweise auf das aktuelle Element einer äußeren Sequenztransformation zugreifen. Um dies zuzulassen, deklariert jeder Sequenztransformationsausdruck "S" eine Variable mit dem Namen $sqN, wobei "N" die Verschachtelungsebene des Ausdrucks S innerhalb der äußeren Sequenztransformationsausdrücke ist. $sqN ist im Grunde ein Synonym für $, d.h. es ist an die vom Eingabeausdruck S zurückgegebenen Elemente gebunden. Auf $sqN können jedoch andere Sequenztransformationsausdrücke zugreifen, die im Ausdruck S verschachtelt sein können.

Ausgabe:

{
 "actions":[
   {"action":"ONLOAD to HKG","at":"YYZ","flightNo":"BM267","tagNum":"17657806299833"},
   {"action":"BagTag Scan at YYZ","at":"YYZ","flightNo":"BM267","tagNum":"17657806299833"},
   {"action":"Checkin at YYZ","at":"YYZ","flightNo":"BM267","tagNum":"17657806299833"},
   {"action":"Offload to Carousel at BLR","at":"BLR","flightNo":"BM115","tagNum":"17657806299833"},
   {"action":"ONLOAD to BLR","at":"HKG","flightNo":"BM115","tagNum":"17657806299833"},
   {"action":"OFFLOAD from HKG","at":"HKG","flightNo":"BM115","tagNum":"17657806299833"}
 ]
}

Beispiele für SQL-Ausdrücke mit QueryRequest-API

Sie können die QueryRequest-API verwenden und Daten aus einer NoSQL-Tabelle mit SQL-Ausdrücken filtern.

Zum Ausführen der Abfrage verwenden Sie die NoSQLHandle.query()-API.

Laden Sie den vollständigen Code SQLExpressions.java aus den Beispielen hier herunter.

 //Fetch rows from the table
private static void fetchRows(NoSQLHandle handle,String sqlstmt) throws Exception {
   try (
      QueryRequest queryRequest = new QueryRequest().setStatement(sqlstmt);
      QueryIterableResult results = handle.queryIterable(queryRequest)){
      for (MapValue res : results) {
         System.out.println("\t" + res);
      }
   }
}
String paran_expr="SELECT fullName, bag.bagInfo.tagNum, bag.bagInfo.routing, "+
"bag.bagInfo[].flightLegs[].fltRouteDest FROM BaggageInfo bag WHERE "+
"bag.bagInfo.flightLegs[].fltRouteSrc=any \"SFO\" AND "+
"(bag.bagInfo[].flightLegs[].fltRouteDest=any \"ATH\" OR "+
"bag.bagInfo[].flightLegs[].fltRouteDest=any \"JTR\" )";
System.out.println("Using Paranthesized expression ");
fetchRows(handle,paran_expr);

String case_expr="SELECT fullName,"+
         "CASE WHEN NOT exists bag.bagInfo.flightLegs[0] "+
        "THEN \"you have no bag info\" "+
        "WHEN NOT exists bag.bagInfo.flightLegs[1] "+
        "THEN \"you have one hop\" "+
        "WHEN NOT exists bag.bagInfo.flightLegs[2] "+
        "THEN \"you have two hops.\" "+
        "ELSE \"you have three hops.\" "+
        "END AS NUMBER_HOPS "+
"FROM BaggageInfo bag WHERE ticketNo=1762341772625";
System.out.println("Using Case Expression ");
fetchRows(handle,case_expr);

String seq_trn_expr="SELECT seq_transform(l.bagInfo[],"+
                              "seq_transform("+
                                "$sq1.flightLegs[],"+
                                "seq_transform("+
                                  "$sq2.actions[],"+
                                  "{"+
                                   "\"at\" : $sq3.actionAt,"+
                                   "\"action\" : $sq3.actionCode,"+
                                   "\"flightNo\" : $sq2.flightNo,"+
                                   "\"tagNum\" : $sq1.tagNum"+
                                  "}"+
                               ")"+
                              ")"+
                           ") AS actions FROM baggageInfo l WHERE ticketNo=1762376407826";
System.out.println("Using Sequence Transform Expressions ");
fetchRows(handle,seq_trn_expr);

Um die Abfrage auszuführen, verwenden Sie die Methode borneo.NoSQLHandle.query().

Laden Sie den vollständigen Code SQLExpressions.py aus den Beispielen hier herunter.

# Fetch data from the table
def fetch_data(handle,sqlstmt):
   request = QueryRequest().set_statement(sqlstmt)
   print('Query results for: ' + sqlstmt)
   result = handle.query(request)
   for r in result.get_results():
      print('\t' + str(r))
paran_expr = '''SELECT fullName, bag.bagInfo.tagNum, bag.bagInfo.routing,
                   bag.bagInfo[].flightLegs[].fltRouteDest FROM BaggageInfo bag
                   WHERE bag.bagInfo.flightLegs[].fltRouteSrc=any "SFO" AND
                   (bag.bagInfo[].flightLegs[].fltRouteDest=any "ATH" OR
                   bag.bagInfo[].flightLegs[].fltRouteDest=any "JTR" )'''
print('Using Paranthesized expression:')
fetch_data(handle,paran_expr)

case_expr = '''SELECT fullName,
    CASE
        WHEN NOT exists bag.bagInfo.flightLegs[0]
        THEN "you have no bag info"
        WHEN NOT exists bag.bagInfo.flightLegs[1]
        THEN "you have one hop"
        WHEN NOT exists bag.bagInfo.flightLegs[2]
        THEN "you have two hops."
        ELSE "you have three hops."
    END AS NUMBER_HOPS
    FROM BaggageInfo bag WHERE ticketNo=1762341772625'''
print('Using Case Expression:')
fetch_data(handle,case_expr)

seq_trn_expr = '''SELECT seq_transform(l.bagInfo[],
                     seq_transform(
                       $sq1.flightLegs[],
                         seq_transform(
                           $sq2.actions[],
                            {
                              "at" : $sq3.actionAt,
                              "action" : $sq3.actionCode,
                              "flightNo" : $sq2.flightNo,
                              "tagNum" : $sq1.tagNum
                            }
                        )
                    )
                ) AS actions FROM baggageInfo l WHERE ticketNo=1762376407826'''
print('Using Sequence Transform Expressions:')
fetch_data(handle,seq_trn_expr)

Um eine Abfrage auszuführen, verwenden Sie die Funktion Client.Query.

Laden Sie den vollständigen Code SQLExpressions.go aus den Beispielen hier herunter.

 //fetch data from the table
func fetchData(client *nosqldb.Client, err error, tableName string, querystmt string)(){
   prepReq := &nosqldb.PrepareRequest{
		Statement: querystmt,
   }
   prepRes, err := client.Prepare(prepReq)
   if err != nil {
      fmt.Printf("Prepare failed: %v\n", err)
      return
   }
   queryReq := &nosqldb.QueryRequest{
		 PreparedStatement: &prepRes.PreparedStatement,   }
   var results []*types.MapValue
   for {
      queryRes, err := client.Query(queryReq)
      if err != nil {
         fmt.Printf("Query failed: %v\n", err)
  	return
      }
      res, err := queryRes.GetResults()
      if err != nil {
         fmt.Printf("GetResults() failed: %v\n", err)
  	return
      }
      results = append(results, res...)
      if queryReq.IsDone() {
         break
      }
   }
   for i, r := range results {
      fmt.Printf("\t%d: %s\n", i+1, jsonutil.AsJSON(r.Map()))
   }
}
paran_expr := `SELECT fullName, bag.bagInfo.tagNum, bag.bagInfo.routing,
                    bag.bagInfo[].flightLegs[].fltRouteDest FROM BaggageInfo bag
                    WHERE bag.bagInfo.flightLegs[].fltRouteSrc=any "SFO" AND
                    (bag.bagInfo[].flightLegs[].fltRouteDest=any "ATH" OR
                    bag.bagInfo[].flightLegs[].fltRouteDest=any "JTR" )`
fmt.Printf("Using Paranthesized expression:\n")
fetchData(client, err,tableName,paran_expr)

case_expr := `SELECT fullName,
                 CASE
         			WHEN NOT exists bag.bagInfo.flightLegs[0]
         			THEN "you have no bag info"
         			WHEN NOT exists bag.bagInfo.flightLegs[1]
         			THEN "you have one hop"
         			WHEN NOT exists bag.bagInfo.flightLegs[2]
         			THEN "you have two hops."
         			ELSE "you have three hops."
     				END AS NUMBER_HOPS
     				FROM BaggageInfo bag WHERE ticketNo=1762341772625`
fmt.Printf("Using Case Expression:\n")
fetchData(client, err,tableName,case_expr)

seq_trn_expr := `SELECT seq_transform(l.bagInfo[],
                      seq_transform(
                        $sq1.flightLegs[],
                          seq_transform(
                            $sq2.actions[],
                             {
                               "at" : $sq3.actionAt,
                               "action" : $sq3.actionCode,
                               "flightNo" : $sq2.flightNo,
                               "tagNum" : $sq1.tagNum
                             }
                         )
                     )
                 ) AS actions FROM baggageInfo l WHERE ticketNo=1762376407826`
fmt.Printf("Using Sequence Transform Expressions:\n")
fetchData(client, err,tableName,seq_trn_expr)

Um eine Abfrage auszuführen, verwenden Sie die Methode query.

JavaScript: Laden Sie den vollständigen Code SQLExpressions.js aus den Beispielen hier herunter.

  //fetches data from the table
async function fetchData(handle,querystmt) {
   const opt = {};
   try {
      do {
         const result = await handle.query(querystmt, opt);
         for(let row of result.rows) {
            console.log('  %O', row);
         }
         opt.continuationKey = result.continuationKey;
      } while(opt.continuationKey);
   } catch(error) {
      console.error('  Error: ' + error.message);
   }
}

TypeScript: Laden Sie den vollständigen Code SQLExpressions.ts aus den Beispielen hier herunter.

interface StreamInt {
   acct_Id: Integer;
   profile_name: String;
   account_expiry: TIMESTAMP;
   acct_data: JSON;
}
/* fetches data from the table */
async function fetchData(handle: NoSQLClient,querystmt: any) {
   const opt = {};
   try {
      do {
         const result = await handle.query<StreamInt>(querystmt, opt);
         for(let row of result.rows) {
            console.log('  %O', row);
         }
         opt.continuationKey = result.continuationKey;
      } while(opt.continuationKey);
   } catch(error) {
      console.error('  Error: ' + error.message);
   }
}
const paran_expr = `SELECT fullName, bag.bagInfo.tagNum, bag.bagInfo.routing,
                    bag.bagInfo[].flightLegs[].fltRouteDest FROM BaggageInfo bag
                    WHERE bag.bagInfo.flightLegs[].fltRouteSrc=any "SFO" AND
                    (bag.bagInfo[].flightLegs[].fltRouteDest=any "ATH" OR
                    bag.bagInfo[].flightLegs[].fltRouteDest=any "JTR" )`
console.log("Using Paranthesized expression");
await fetchData(handle,paran_expr);

const case_expr = `SELECT fullName,
                  CASE
                    WHEN NOT exists bag.bagInfo.flightLegs[0]
                    THEN "you have no bag info"
                    WHEN NOT exists bag.bagInfo.flightLegs[1]
                    THEN "you have one hop"
                    WHEN NOT exists bag.bagInfo.flightLegs[2]
                    THEN "you have two hops."
                    ELSE "you have three hops."
                  END AS NUMBER_HOPS
                  FROM BaggageInfo bag WHERE ticketNo=1762341772625`
console.log("Using Case Expression");
await fetchData(handle,case_expr);

const seq_trn_expr = `SELECT seq_transform(l.bagInfo[],
                      seq_transform(
                        $sq1.flightLegs[],
                        seq_transform(
                          $sq2.actions[],
                          {
                            "at" : $sq3.actionAt,
                            "action" : $sq3.actionCode,
                            "flightNo" : $sq2.flightNo,
                            "tagNum" : $sq1.tagNum
                          }
                      )
                  )
                ) AS actions FROM baggageInfo l WHERE ticketNo=1762376407826`
console.log("Using Sequence Transform Expressions");
await fetchData(handle,seq_trn_expr);

Um eine Abfrage auszuführen, können Sie die Methode QueryAsync aufrufen oder die Methode GetQueryAsyncEnumerable aufrufen und über die resultierende asynchrone aufzählbare Methode iterieren.

Laden Sie den vollständigen Code SQLExpressions.cs aus den Beispielen hier herunter.

private static async Task fetchData(NoSQLClient client,String querystmt){
   var queryEnumerable = client.GetQueryAsyncEnumerable(querystmt);
   await DoQuery(queryEnumerable);
}

private static async Task DoQuery(IAsyncEnumerable<QueryResult<RecordValue>> queryEnumerable){
   Console.WriteLine("  Query results:");
   await foreach (var result in queryEnumerable) {
      foreach (var row in result.Rows)
      {
         Console.WriteLine();
         Console.WriteLine(row.ToJsonString());
      }
   }
}
private const string paran_expr =@"SELECT fullName, bag.bagInfo.tagNum, bag.bagInfo.routing,
                                         bag.bagInfo[].flightLegs[].fltRouteDest FROM BaggageInfo bag
                                         WHERE bag.bagInfo.flightLegs[].fltRouteSrc=any ""SFO"" AND
                                         (bag.bagInfo[].flightLegs[].fltRouteDest=any ""ATH"" OR
                                         bag.bagInfo[].flightLegs[].fltRouteDest=any ""JTR"" )";
Console.WriteLine("\nUsing Paranthesized expression:!");
await fetchData(client,paran_expr);

private const string case_expr =@"SELECT fullName,
                                        CASE
                                          WHEN NOT exists bag.bagInfo.flightLegs[0]
                                          THEN ""you have no bag info""
                                          WHEN NOT exists bag.bagInfo.flightLegs[1]
                                          THEN ""you have one hop""
                                          WHEN NOT exists bag.bagInfo.flightLegs[2]
                                          THEN ""you have two hops.""
                                          ELSE ""you have three hops.""
                                       END AS NUMBER_HOPS
                                       FROM BaggageInfo bag WHERE ticketNo=1762341772625";
Console.WriteLine("\nUsing Case Expression!");
await fetchData(client,case_expr);

private const string seq_trn_expr =@"SELECT seq_transform(l.bagInfo[],
                                           seq_transform(
                                             $sq1.flightLegs[],
                                             seq_transform(
                                                $sq2.actions[],
                                                {
                                                   ""at"" : $sq3.actionAt,
                                                   ""action"" : $sq3.actionCode,
                                                   ""flightNo"" : $sq2.flightNo,
                                                   ""tagNum"" : $sq1.tagNum
                                                }
                                               )
                                             )
                                           ) AS actions FROM baggageInfo l WHERE ticketNo=1762376407826" ;
Console.WriteLine("\nUsing Sequence Transform Expressions!");
await fetchData(client,seq_trn_expr);

Verwandte Themen