Skip to content

練習

練習1

請寫一段query列出每個場景的scene_numbertitletitle的長度(命名為title_len),並對title_lenscene_number作升冪排序。

練習1參考解答

select Scene {
    scene_number, 
    title, 
    title_len:= len(.title)} 
order by (.title_len, .scene_number);
{
    default::Scene {scene_number: 1, title: '韓琛初現', title_len: 4},
    default::Scene {scene_number: 3, title: '黑白顛倒', title_len: 4},
    default::Scene {scene_number: 7, title: '互猜底牌', title_len: 4},
    default::Scene {scene_number: 8, title: '誰是內鬼', title_len: 4},
    default::Scene {scene_number: 9, title: '真相大白', title_len: 4},
    default::Scene {scene_number: 2, title: '我想跟他換', title_len: 5},
    default::Scene {scene_number: 4, title: '被遺忘的時光', title_len: 6},
    default::Scene {scene_number: 10, title: '我想做個好人', title_len: 6},
    default::Scene {scene_number: 5, title: '三年之後又三年', title_len: 7},
    default::Scene {scene_number: 6, title: '有內鬼終止交易', title_len: 7},
}

練習2

請寫一個名為is_higher_policerankfunction,其接收id1id2兩個<uuid>型態的變數。當id1所屬objectpolice_rank高於id2所屬objectpolice_rank時,返回true,否則為false。此外:

  • id1id2並非有效的uuid型態時,應該raise InvalidValueError
  • id1id2所屬object沒有具有police_rank property時,應該raise CardinalityViolationError
練習2參考解答
function is_higher_policerank(id1: uuid, id2: uuid) -> bool
using (     
    with p1:= (select <IsPolice>id1),
         p2:= (select <IsPolice>id2),
    select p1.police_rank ?? PoliceRank.Protected > 
           p2.police_rank ?? PoliceRank.Protected
);