Primäre Ausdrücke in SQL verwenden
Wenn Sie die Beispiele befolgen möchten, finden Sie unter Beispieldaten zum Ausführen von Abfragen Informationen zum Anzeigen von Beispieldaten und zum Erstellen der Beispieltabellen mit der OCI-Konsole und zum Laden von Daten mit JSON-Dateien.
Verwandte Themen
Klammern
Klammerausdrü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.
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 Belegnummer und die Routingdetails der Passagiere abrufen. Die erste Filterbedingung ist, dass der Boarding Point/Transit JFK ist. Sobald dies erfüllt ist, ist die zweite Filterbedingung, dass das Ziel entweder MAD oder VIE ist. Sie verwenden eine OR-Bedingung, um den Zielwert zu filtern.
{"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 Folge von Elementen zurückgeben. Der CASE-Ausdruck wird ausgewertet, indem zuerst die WHEN-Ausdrücke von oben nach unten ausgewertet werden, bis der erste, der True zurückgibt. Wenn der i-te WHEN-Ausdruck "true" zurückgibt, wird der i-te THEN-Ausdruck ausgewertet, und das Ergebnis ist das Ergebnis des gesamten CASE-Ausdrucks. Wenn kein WHEN-Ausdruck True zurückgibt, wird der Ausdruck ausgewertet, und das Ergebnis ist das Ergebnis des gesamten CASE-Ausdrucks. Andernfalls ist das Ergebnis des CASE-Ausdrucks die leere Sequenz.
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 anhand einer CASE-Anweisung ermitteln, wie viele Übertragungen 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. Ebenso gibt es zwei Hops, wenn das Array flightLegs
zwei Elemente enthält. Ansonsten gibt es drei Transitpunkte. Hier gehen Sie davon aus, dass eine Tasche maximal drei Transitpunkte/Hops haben kann.
{"fullName":"Mary Watson","NUMBER_HOPS":"you have two hops."}
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
Erläuterung: Die tagNum
der Passagiere im Schema bagInfo
ist ein STRING-Datentyp. Die Anwendung könnte jedoch versehentlich einen NUMBER-Wert als Wert von tagNum
verwenden. Die Abfrage verwendet den Operator "ist vom Typ", um dies zu erfassen, und fordert das System auf, tagNum
zu aktualisieren, wenn der vorhandene Wert keine Zeichenfolge ist.
{"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 nach Möglichkeit neue Elemente eines bestimmten Zieltyps aus den Elementen seiner Eingabesequenz. Beispiel: Ein STRING kann mit dem CAST-Ausdruck in TIMESTAMP(0) konvertiert werden.
- Wenn der Typ des Eingabeelements dem Typ des Zielelements entspricht, ist der Cast ein No-Op: Das Eingabeelement selbst wird zurückgegeben.
- Wenn der Zieltyp ein anderer Platzhalter als JSON ist und der Typ des Eingabeelements ein Subtyp des Platzhaltertyps ist, ist die Konvertierung ein No-Op.
- Wenn der Zieltyp "JSON" lautet, wird ein Fehler ausgelöst, wenn das Eingabeelement ein atomarer Nicht-Json-Typ ist.
- Wenn der Zieltyp ein Arraytyp ist, wird ein Fehler ausgelöst, wenn das Eingabeelement kein Array ist.
- Wenn der Zieltyp "Zeichenfolge" ist, kann das Eingabeelement einen beliebigen Typ aufweisen. Das bedeutet, dass jedes Element in eine Zeichenfolge umgewandelt werden kann. Bei Zeitstempeln hat ihr Zeichenfolgenwert das Format
uuuu-MM-dd['T'HH:mm:ss]
. - Wenn der Zieltyp ein anderer atomarer Typ als String ist, muss das Eingabeelement auch atomar sein.
-
- Ganzzahlen und Längen können in Zeitstempel umgewandelt werden. Der Eingabewert wird als die Anzahl von ms seit dem 1. Januar 1970, 00:00:00 GMT interpretiert.
- String-Elemente können auf alle anderen atomaren Typen umformbar sein. Ob die Konvertierung erfolgreich verläuft oder nicht, hängt davon ab, ob der tatsächliche Zeichenfolgenwert in einen Wert geparst werden kann, der zur Domain des Zieltyps gehört.
- Zeitstempeltelemente können in alle Zeitstempeltypen übernommen werden. Wenn der Zieltyp eine geringere Genauigkeit als das Eingabeelement aufweist, ist der resultierende Zeitstempel der Zeitstempel, der am nächsten zum Eingabezeitstempel in der Zielgenauigkeit liegt.
-
- Um einen STRING in TIMESTAMP umzuwandeln, wenn die Eingabe STRING-Werte im ISO-8601-Format aufweist, wird er automatisch von der SQL-Laufzeit in den Datentyp TIMESTAMP konvertiert.
Hinweis:
ISO8601 beschreibt eine international akzeptierte Möglichkeit, Daten, Zeiten und Dauer darzustellen.Syntax: Date with time: YYYY-MM-DDThh:mm:ss[.s[s[s[s[s[s]]]]][Z|(+|-)hh:mm]
Dabei gilt:- YYYY gibt das Jahr als vier Dezimalstellen an
- MM gibt den Monat als zwei Dezimalstellen an, 00 bis 12
- DD gibt den Tag als zwei Dezimalstellen an, 00 bis 31
- hh gibt die Stunde als zwei Dezimalstellen an, 00 bis 23
- mm gibt die Minuten als zwei Dezimalstellen an, 00 bis 59
- ss[.s[s[s[s]]]]] gibt die Sekunden als zwei Dezimalstellen an, 00 bis 59, optional gefolgt von einem Dezimalpunkt und 1 bis 6 Dezimalstellen (d.h. den Bruchteil einer Sekunde).
- Z gibt die UTC-Zeit an (Zeitzone 0). (Sie kann auch durch +00:00 angegeben werden, aber nicht durch -00:00.)
- (+|-)hh:mm gibt die Zeitzone als Differenz zur UTC an. (Eines von + oder - ist erforderlich.)
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. Mit CAST konvertieren Sie dieses Feld in ein TIMESTAMP-Format.
{"BAG_ARRIVING_DATE":"2019-02-15T21:21:00.000Z"}
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 Details des nach 2019 gelieferten Gepäcks filtern und anzeigen. Das Ankunftsdatum der Mischentity für jedes Element im Array flightLegs
wird mit dem angegebenen Zeitstempel (2019-01-01T00:00:00
) verglichen. Hier ist das Casting implizit, da bagArrivalDate
ein 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.
{"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. Syntaktisch sieht es aus wie eine Funktion mit dem Namen seq_transform
. 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 Ausdrucks seq_transform
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.
ticketNo
ein flaches Array mit allen Aktionen ab, die für das Gepäck dieser ticketNo
ausgeführt wurden.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: Mit dem Sequenztransformationsausdruck können Sie JSON-Dokumente transformieren, 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 Elemente gebunden, die vom Eingabeausdruck S
zurückgegeben werden. Auf $sqN
können jedoch andere Sequenztransformationsausdrücke zugegriffen werden, die im Ausdruck S
verschachtelt sein können.
{
"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 der 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.
//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()
.
# 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
.
//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
.
//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);
}
}
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ählung iterieren.
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);