Uso de Expresiones Primarias en SQL
Si desea seguir los ejemplos, consulte Datos de ejemplo para ejecutar consultas para ver datos de ejemplo y aprender a utilizar la consola de OCI para crear las tablas de ejemplo y cargar datos mediante archivos JSON.
Temas relacionados
Expresiones entre paréntesis
Las expresiones entre paréntesis se utilizan principalmente para modificar la prioridad por defecto entre operadores. También se utilizan como una ayuda sintáctica para mezclar expresiones de maneras que de otro modo causarían ambigüedades sintácticas.
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" )
Explicación: desea recuperar el nombre completo, el número de etiqueta y los detalles de enrutamiento de los pasajeros. La primera condición de filtro es que el punto de embarque/tránsito sea JFK. Una vez que esto se cumple, la segunda condición de filtro es que el destino sea MAD o VIE. Utilice una condición OR para filtrar el valor de destino.
{"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"]}
Expresiones Case
La expresión CASE buscada es similar a las sentencias if-then-else de los lenguajes de programación tradicionales. Consta de varios pares WHEN-THEN, seguidos de una cláusula ELSE opcional al final. Cada expresión WHEN es una condición, es decir, debe devolver BOOLEAN. Las expresiones THEN y la expresión ELSE pueden devolver cualquier secuencia de elementos. La expresión CASE se evalúa evaluando primero las expresiones WHEN de arriba abajo hasta la primera que devuelve true. Si la expresión i-th WHEN devuelve true, se evalúa la expresión i-th THEN y su resultado es el resultado de toda la expresión CASE. Si ninguna expresión WHEN devuelve true, si hay un ELSE, se evalúa su expresión y su resultado es el resultado de toda la expresión CASE; de lo contrario, el resultado de la expresión CASE es la secuencia vacía.
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
Explicación: desea determinar cuántos tránsitos hay para el pasajero bagInfo
mediante una sentencia CASE. Si la matriz flightLegs
no tiene elementos, el pasajero no tiene datos de bolsa. Cuando la matriz flightLegs
tiene un solo elemento, solo hay un punto de tránsito. Del mismo modo, si la matriz flightLegs
tiene dos elementos, hay dos saltos. De lo contrario, hay tres puntos de tránsito. Aquí se asume que una bolsa puede tener como máximo tres puntos de tránsito/talleres.
{"fullName":"Mary Watson","NUMBER_HOPS":"you have two hops."}
tagNum
de pasajeros si el valor existente no es una cadena.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
Explicación: tagNum
de los pasajeros en el esquema bagInfo
es un tipo de dato STRING. Pero la aplicación podría tener un valor NUMBER como valor de tagNum
por error. La consulta utiliza el operador "es de tipo" para capturar esto y solicita al sistema que actualice tagNum
si el valor existente no es una cadena.
{"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"}
Expresión cast
La expresión de conversión crea, si es posible, nuevos elementos de un tipo de destino determinado a partir de los elementos de su secuencia de entrada. Por ejemplo, un STRING se puede convertir a TIMESTAMP(0) mediante la expresión CAST.
- Si el tipo del elemento de entrada es igual al tipo de elemento de destino, la conversión es no operativa: se devuelve el elemento de entrada en sí.
- Si el tipo de destino es un tipo de comodín distinto de JSON y el tipo del elemento de entrada es un subtipo del tipo de comodín, la conversión es no operativa.
- Si el tipo de destino es JSON, se emite un error si el elemento de entrada es un tipo atómico no json.
- Si el tipo de destino es un tipo de matriz, se genera un error si el elemento de entrada no es una matriz.
- Si el tipo de destino es cadena, el elemento de entrada puede ser de cualquier tipo. Esto significa que cada elemento se puede convertir en una cadena. Para los registros de hora, su valor de cadena está en UTC y tiene el formato
uuuu-MM-dd['T'HH:mm:ss]
. - Si el tipo de destino es un tipo atómico distinto de cadena, el elemento de entrada también debe ser atómico.
-
- Los enteros y los largos se pueden convertir en registros de hora. El valor de entrada se interpreta como el número de segundos desde el 1 de enero de 1970, 00:00:00 GMT.
- Los elementos de cadena pueden ser casuales para todos los demás tipos atómicos. Si la conversión se realiza correctamente o no depende de si el valor de cadena real se puede analizar en un valor que pertenezca al dominio del tipo de destino.
- Los elementos de registro de hora se pueden poner en cascada en todos los tipos de registro de hora. Si el tipo de destino tiene una precisión menor que el elemento de entrada, el registro de hora resultante es el más cercano al registro de hora de entrada en la precisión de destino.
-
- Para convertir un STRING en TIMESTAMP, si la entrada tiene valores STRING en formato ISO-8601, el tiempo de ejecución SQL lo convertirá automáticamente en tipo de dato TIMESTAMP.
Note:
ISO8601 describe una forma aceptada internacionalmente de representar fechas, horas y duraciones.Syntax: Date with time: YYYY-MM-DDThh:mm:ss[.s[s[s[s[s[s]]]]][Z|(+|-)hh:mm]
donde- AAAA especifica el año, como cuatro dígitos decimales
- MM especifica el mes, como dos dígitos decimales, de 00 a 12
- DD especifica el día, como dos dígitos decimales, de 00 a 31
- hh especifica la hora, como dos dígitos decimales, de 00 a 23
- mm especifica los minutos, como dos dígitos decimales, de 00 a 59
- ss[.s[s[s[s[s]]]]] especifica los segundos, como dos dígitos decimales, de 00 a 59, seguido opcionalmente por una coma decimal y de 1 a 6 dígitos decimales (que representan la parte fraccional de un segundo).
- Z especifica la hora UTC (zona horaria 0). (También se puede especificar por +00:00, pero no por -00:00).
- (+|-)hh:mm especifica la zona horaria como diferencia de UTC. (Se requiere uno de + o -).
SELECT CAST (bag.bagInfo.bagArrivalDate AS Timestamp(3))
AS BAG_ARRIVING_DATE
FROM BaggageInfo bag WHERE bag.confNo=DN3I4Q
Explicación: bagArrivalDate
es un STRING. Con CAST está convirtiendo este campo en un formato TIMESTAMP.
{"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"]
Explicación: desea filtrar y mostrar los detalles del equipaje que se envía después de 2019. La fecha de llegada de la bolsa para cada elemento de la matriz flightLegs
se compara con el registro de hora determinado (2019-01-01T00:00:00
). Aquí la conversión está implícita, ya que bagArrivalDate
es un STRING y se compara directamente con un valor de registro de hora estático. No se necesita una función CAST explícita cuando se puede realizar una conversión implícita. Sin embargo, sus datos deben tener el formato YYYY-MM-DDTHH:MI:SS
. A continuación, utilice la condición EXISTS para comprobar si bagInfo está presente para esta condición de registro de hora.
{"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"}
Expresiones de transformación de secuencia
Una expresión de transformación de secuencia transforma una secuencia en otra. Se parece sintácticamente a una función cuyo nombre es seq_transform
. El primer argumento es una expresión que genera la secuencia que se va a transformar (la secuencia de entrada) y el segundo argumento es una expresión "asignador" que se calcula para cada elemento de la secuencia de entrada. El resultado de la expresión seq_transform
es la concatenación de secuencias producidas por cada evaluación de la expresión asignadora. La expresión asignadora puede acceder al elemento de entrada actual mediante la variable $.
ticketNo
, recupere una matriz plana que contenga todas las acciones realizadas en el equipaje de ese ticketNo
.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
Explicación: puede utilizar la expresión de transformación de secuencia para transformar documentos JSON almacenados en filas de tabla. En estos casos, a menudo se utilizan varias expresiones de transformación de secuencia anidadas entre sí. Aquí la expresión mapeadora de una transformación de secuencia interna puede necesitar acceder al elemento actual de una transformación de secuencia externa. Para ello, cada expresión de transformación de secuencia 'S' declara una variable con el nombre $sqN
, donde N es el nivel de anidamiento de la expresión S
dentro de las expresiones de transformación de secuencia externa. $sqN
es básicamente un sinónimo de $
, es decir, está enlazado a los elementos devueltos por la expresión de entrada S
. Sin embargo, otras expresiones de transformación de secuencia que se pueden anidar dentro de la expresión S
pueden acceder a $sqN
.
{
"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"}
]
}
Ejemplos de expresiones SQL con la API QueryRequest
Puede utilizar la API QueryRequest
y filtrar datos de una tabla NoSQL mediante expresiones SQL.
Para ejecutar la consulta, utilice la API NoSQLHandle.query()
.
//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);
Para ejecutar la consulta, utilice el método 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)
Para ejecutar una consulta, utilice la función 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)
Para ejecutar una consulta, utilice el método 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);
Para ejecutar una consulta, puede llamar al método QueryAsync
o llamar al método GetQueryAsyncEnumerable
e iterar sobre el elemento enumerable asíncrono resultante.
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);