SQL에서 기본 표현식 사용
예제와 함께 따라가려면 쿼리를 실행할 샘플 데이터를 참조하여 샘플 데이터를 확인하고 OCI 콘솔을 사용하여 예제 테이블을 생성하고 JSON 파일을 사용하여 데이터를 로드하는 방법을 알아보십시오.
괄호 표현식
괄호로 묶인 표현식은 주로 연산자 간에 기본 우선 순위를 변경하는 데 사용됩니다. 또한 구문 모호성을 유발하는 방식으로 표현식을 혼합하기 위한 구문 보조 수단으로도 사용됩니다.
예:JFK /traversing에서 JFK로 탑승하고 목적지가 MAD 또는 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" )
설명: 승객의 전체 이름, 태그 번호 및 경로 지정 세부정보를 인출하려고 합니다. 첫 번째 필터 조건은 탑승 지점/전송이 JFK라는 것입니다. 이 조건이 충족되면 두번째 필터 조건은 대상이 MAD 또는 VIE라는 것입니다. OR 조건을 사용하여 대상 값을 필터링합니다.
출력:
{"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 표현식
검색된 CASE 식은 기존 프로그래밍 언어의 if-then-else 문과 유사합니다. 이 절은 많은 WHEN-THEN 쌍과 끝에 선택적 ELSE 절로 구성됩니다. 각 WHEN 표현식은 조건, 즉 BOOLEAN을 반환해야 합니다. ELSE 표현식과 THEN 표현식은 임의의 항목 시퀀스를 반환할 수 있습니다. CASE 식은 먼저 WHEN 표현식을 위에서 아래로 평가하여 true를 반환하는 첫번째 표현식까지 평가합니다. true를 반환하는 i-th WHEN 표현식인 경우 i-th THEN 표현식이 평가되고 결과는 전체 CASE 식의 결과입니다. WHEN 표현식이 true를 반환하지 않으면 ELSE가 있는 경우 해당 표현식이 평가되고 그 결과는 전체 CASE 식의 결과이고 그렇지 않은 경우 CASE 식의 결과는 빈 시퀀스가 됩니다.
예제:
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
설명: CASE 문을 사용하여 승객 bagInfo에 대한 전송 횟수를 확인하려고 합니다. flightLegs 배열에 요소가 없는 경우 승객은 가방 데이터가 없습니다. flightLegs 배열에 요소가 하나만 있는 경우 이동점은 하나만 있습니다. 마찬가지로, flightLegs 배열에 두 개의 요소가 있는 경우 두 개의 홉이 있습니다. 그 외에는 세 가지 교통 지점이 있습니다. 여기서는 가방이 최대 세 개의 이동점/홉을 가질 수 있다고 가정합니다.
출력:
{"fullName":"Mary Watson","NUMBER_HOPS":"you have two hops."}
예 2:기존 값이 문자열이 아닌 경우 승객의 tagNum를 업데이트하도록 시스템에 알리는 질의를 작성합니다.
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
설명:bagInfo 스키마에 있는 승객의 tagNum은 STRING 데이터 유형입니다. 그러나 응용 프로그램은 실수로 NUMBER 값을 tagNum 값으로 사용할 수 있습니다. 질의는 "is of type" 연산자를 사용하여 이를 캡처하고 기존 값이 문자열이 아닌 경우 tagNum를 업데이트하라는 메시지를 표시합니다.
출력(간단성을 위해 표시되는 행은 거의 없습니다.)
{"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 표현식을 사용하여 STRING을 TIMESTAMP(0)으로 변환할 수 있습니다.
CAST 표현식에 이어지는 규칙:
-
입력 항목의 유형이 대상 항목 유형과 같은 경우 캐스트는 no-op입니다. 입력 항목 자체가 반환됩니다.
-
대상 유형이 JSON이 아닌 와일드카드 유형이고 입력 항목의 유형이 와일드카드 유형의 하위 유형인 경우 캐스트는 no-op입니다.
-
대상 유형이 JSON인 경우 입력 항목이 JSON이 아닌 원자 유형인 경우 오류가 발생합니다.
-
대상 유형이 배열 유형인 경우 입력 항목이 배열이 아닌 경우 오류가 발생합니다.
-
대상 유형이 문자열인 경우 입력 항목은 임의 유형일 수 있습니다. 즉, 모든 항목을 문자열로 변환할 수 있습니다. 시간 기록의 경우 문자열 값은 UTC 형식이며
uuuu-MM-dd['T'HH:mm:ss]형식입니다. -
대상 유형이 문자열이 아닌 원자 유형인 경우 입력 항목도 원자여야 합니다.
-
-
정수와 길이는 시간 기록으로 변환할 수 있습니다. 입력 값은 1970년 1월 1일, 00:00:00 GMT 이후의 밀리초 수로 해석됩니다.
-
문자열 항목은 다른 모든 원자 유형으로 변환될 수 있습니다. 캐스트의 성공 여부는 실제 문자열 값을 대상 유형의 도메인에 속하는 값으로 구문 분석할 수 있는지 여부에 따라 달라집니다.
-
시간 기록 항목은 모든 시간 기록 유형으로 변환할 수 있습니다. 대상 유형의 전체 자릿수가 입력 항목의 전체 자릿수보다 작은 경우 결과 시간 기록은 대상 전체 자릿수의 입력 시간 기록에 가장 가까운 시간 기록입니다.
-
-
-
STRING을 TIMESTAMP로 변환하기 위해 입력의 STRING 값이 ISO-8601 형식인 경우 SQL 런타임에 의해 자동으로 TIMESTAMP 데이터 유형으로 변환됩니다.
참고:
ISO8601은 날짜, 시간 및 기간을 나타내는 국제적으로 허용되는 방법을 설명합니다.
구문: 날짜와 시간: YYYY-MM-DDThh:mm:ss[.s[s[s[s[s[s[s]]][Z|(+|-)hh:mm]
설명
- YYYY는 연도를 소수점 네 자리로 지정합니다.
- MM은 월을 소수점 2자리 00-12로 지정합니다.
- DD는 요일을 소수점 2자리 00~31로 지정합니다.
- hh는 00~23의 소수점 두 자리 숫자로 시간을 지정합니다.
- mm은 분을 소수점 이하 2자리 00-59로 지정합니다.
- ss[.s[s[s[s[s]]]]]는 초를 소수점 2자리(00~59)로 지정하며, 선택적으로 그 뒤에 소수점과 소수점 1~6자리(초의 소수 부분 표시)가 옵니다.
- Z는 UTC 시간(시간대 0)을 지정합니다. +00:00으로도 지정할 수 있지만 -00:00으로는 지정할 수 없습니다.
- (+|-)hh:mm은 시간대를 UTC와의 차이로 지정합니다. (+ 또는 - 중 하나가 필요합니다.)
예 1:TIMESTAMP(3) 형식의 예약 코드 DN3I4Q를 사용하여 승객에 대한 가방 도착 일자를 인출합니다.
SELECT CAST (bag.bagInfo.bagArrivalDate AS Timestamp(3))
AS BAG_ARRIVING_DATE
FROM BaggageInfo bag WHERE bag.confNo=DN3I4Q
설명: bagArrivalDate는 STRING입니다. CAST를 사용하여 이 필드를 TIMESTAMP 형식으로 변환합니다.
출력:
{"BAG_ARRIVING_DATE":"2019-02-15T21:21:00.000Z"}
예 2: 2019년 이후 배송된 모든 고객 수하물에 대한 전체 이름 및 태그 번호를 가져옵니다.
SELECT fullName, bag.ticketNo,
bag.bagInfo[].bagArrivalDate
FROM BaggageInfo bag WHERE
exists bag.bagInfo[$element.bagArrivalDate >="2019-01-01T00:00:00"]
설명:2019년 이후 배송된 수하물의 세부정보를 필터링하여 표시하려고 합니다. flightLegs 배열의 모든 요소에 대한 가방 도착 날짜는 지정된 시간 기록(2019-01-01T00:00:00)과 비교됩니다. 여기서 캐스팅은 bagArrivalDate 가 STRING이므로 암시적이며 정적 타임스탬프 값과 직접 비교됩니다. 암시적 데이터 캐스팅을 수행할 수 있는 경우에는 명시적 CAST 함수가 필요하지 않습니다. 그러나 데이터는 YYYY-MM-DDTHH:MI:SS 형식이어야 합니다. 그런 다음 EXISTS 조건을 사용하여 이 시간 기록 조건에 대해 bagInfo가 존재하는지 확인합니다.
출력:
{"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"}
시퀀스 변환 표현식
시퀀스 변환 표현식은 시퀀스를 다른 시퀀스로 변환합니다. 구문적으로 이름이 seq_transform인 함수처럼 보입니다. 첫번째 인수는 변환할 시퀀스(입력 시퀀스)를 생성하는 표현식이며 두번째 인수는 입력 시퀀스의 각 항목에 대해 계산되는 "매퍼" 표현식입니다. seq_transform 표현식의 결과는 매퍼 표현식의 각 평가에 의해 생성된 시퀀스의 연결입니다. mapper 표현식은 $ 변수를 통해 현재 입력 항목에 액세스할 수 있습니다.
예: 각 ticketNo에 대해 해당 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
설명: 시퀀스 변환 표현식을 사용하여 테이블 행에 저장된 JSON 문서를 변환할 수 있습니다. 이러한 경우 서로 중첩된 여러 시퀀스 변환 표현식을 사용하는 경우가 많습니다. 여기서 내부 시퀀스 변환의 매퍼 표현식은 외부 시퀀스 변환의 현재 항목에 액세스해야 할 수 있습니다. 이를 허용하기 위해 각 시퀀스 변환 표현식 'S'는 이름이 $sqN인 변수를 선언합니다. 여기서 N은 외부 시퀀스 변환 표현식 내에서 표현식 S의 중첩 레벨입니다. $sqN는 기본적으로 $의 동의어입니다. 즉, 입력 표현식 S에 의해 반환된 항목에 바인드됩니다. 그러나 $sqN는 S 표현식 내에 중첩될 수 있는 다른 시퀀스 변환 표현식에 의해 액세스될 수 있습니다.
출력:
{
"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"}
]
}
QueryRequest API를 사용하는 SQL 표현식 예제
QueryRequest API를 사용하고 SQL 표현식을 사용하여 NoSQL 테이블에서 데이터를 필터링할 수 있습니다.
질의를 실행하려면 NoSQLHandle.query() API를 사용합니다.
SQLExpressions.java 예제를 통해 여기에서 전체 코드를 다운로드하십시오.
//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);
query를 실행하려면 borneo.NoSQLHandle.query() 메소드를 사용합니다.
SQLExpressions.py의 전체 코드를 여기에서 다운로드하세요.
# 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)
질의를 실행하려면 Client.Query 함수를 사용합니다.
SQLExpressions.go의 전체 코드를 여기에서 다운로드하십시오.
//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)
질의를 실행하려면 query 메소드를 사용합니다.
JavaScript: SQLExpressions.js 예제에서 전체 코드를 다운로드합니다.
//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: SQLExpressions.ts 예제를 통해 여기에서 전체 코드를 다운로드하세요.
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);
질의를 실행하기 위해 QueryAsync 메소드를 호출하거나 GetQueryAsyncEnumerable 메소드를 호출하여 결과 비동기 열거형을 반복할 수 있습니다.
SQLExpressions.cs 예제를 통해 여기에서 전체 코드를 다운로드하십시오.
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);