Следует ли объединять 2 набора результатов хранимых процедур на стороне базы данных или на стороне API? - PullRequest
0 голосов
/ 25 июня 2018

Ниже приведен API, и мне нужно создать новую хранимую процедуру, чтобы вернуть это. Верхняя часть перед «MemberCard» имеет хранимую процедуру, которая может выводить ее, а под-детали «MemberCard» также имеют свою собственную хранимую процедуру. Как объединить результирующие наборы из 2 хранимых процедур в том же формате ниже? или должен быть Java API для объединения результирующих наборов 2 sp?

Пример ответа:

{  
   "Action":"MemberLogin3",
   "CardNumber":"00000376",
   "MemberMobilePhone":"94600240",
   "SMSValidation":1,
   "MemberToken":"",
   "PWDFailRetryCount":10,
   "CheckResult":"0",
   "EmailValidation":1,
   "ResponseCode":0,
   "Type":"Manual",
   "MemberCreatedOn":"2014-12-16 09:33:04",
   "MemberID":49,
   "MemberDefLanguage":"us",
   "CountryCode":"00852",
   "ReadReguFlag":0,
   "MemberCard":[  
      {  
         "OctopusID":"12455678|0",
         "BrandPicGFile":"",
         "CardTypeName":"",
         "CardExpiryDate":"2075-04-01",
         "CardGradePicFile":"/tap/FileManagement/26/20120702_629Tvi.png",
         "MinPointPreAdd":"",
         "MinPointPreTransfer":"",
         "TotalPoints":"1000",
         "CardGrade":"1",
         "BrandID":"1",
         "MaxPointPreTransfer":"0",
         "MemberSex":"2",
         "HomeTelNum":"29504288",
         "BrandPicSFile":"",
         "MemberEngGivenName":"",
         "CountryCode":"852",
         "MaxAmountPreTransfer":"",
         "LaserID":"",
         "MaxAmountPreAdd":"1000.0000",
         "CardNumber":"000100086",
         "CardPointToAmountRate":"100.000000",
         "GracePeriodValue":"",
         "BrandPicMFile":"",
         "MaxPointPreAdd":"",
         "MinAmountPreAdd":"100.0000",
         "MemberRegisterMobile":"85294906037",
         "CardGradeNotes":"",
         "MemberYearofBirth":"1985",
         "GracePeriodUnit":"",
         "MemberIdentityRef":"",
         "MemberEngFamilyName":"",
         "MemberIdentityType":"",
         "MemberMonthofBirth":"6",
         "CardGradeMaxPoint":"",
         "CardTypeID":"",
         "MemberDayofBirth":"1985-06-04",
         "MemberChiFamilyName":"",
         "MemberChiGivenName":"",
         "MinAmountPreTransfer":"",
         "CardStatus":"2",
         "TotalAmount":"1000.00",
         "CardAmountToPointRate":"1.000000",
         "MemberMobilePhone":"94906037",
         "CardAmountExpiryDate":"2013-10-17",
         "CardPointExpiryDate":"2013-10-17",
         "UpdatedOn":"2014-04-17 14:50:10",
         "MemberQRCode":"Q7FM1110339d9b35928d4b8f09235b87a4cd1dd23cf404b"
      }
   ]
}

1 Ответ

0 голосов
/ 25 июня 2018

Следующее - это то, что вы можете сделать, чтобы объединить набор результатов в один SP

  1. Предполагая, что ваши имена таблиц - Member (главная таблица) и MemberCard (дочерняя таблица) и имеют отношение один ко многим от Member до MemberCard.
  2. Слева Соедините основную (Member) и дочернюю (Membercard) таблицы, которые будут генерировать один набор результатов.Это приведет к созданию по одной строке для каждой карточки участника, что означает, что вы получите дубликаты сведений об участнике, если у члена есть несколько карточек MemberCard, и нулевые значения для MemberCard, если у участника нет MemberCard.
  3. В API-интерфейсе JAVA вы можете выполнить группировку памяти вчлен и создать желаемую структуру объекта, которую вы упомянули.

Пример запроса для хранимой процедуры,

SELECT 
 M.Action,
 M.CardNumber,
 M.MemberMobilePhone,
 M.SMSValidation,
 M.MemberToken
 --Other fields from Member table
 MC.OctopusID,
 MC.BrandPicGFile,
 MC.CardTypeName,
 MC.CardExpiryDate
 -- Other fields from MemberCard table

FROM Member M
LEFT OUTER JOIN MemberCard MC ON MC.MemberId = M.MemberId
--Your filter conditions etc 

Вы не упомянули цель объединения в один SP, но если вы хотите уменьшитьвызовы базы данных, то вы можете рассмотреть выше подход.Также, если у вас большой набор результатов, примените подкачку в вашем SQL-запросе.

...