Как сделать выборку страниц при запросе базы данных юниверса с использованием.net SDK и SQL

Я подключаюсь к базе данных юниверса (из программного обеспечения ракеты), используя их драйвер.net. Я хотел бы получить данные по запросу по запросу пользователя на странице, т.е. сделать нумерацию страниц. С другими базами данных мы могли бы использовать (смещение извлечения), но, похоже, Universe DB не поддерживает это. Он не распознает смещение ключевого слова, что-то вродеSELECT NAME, AGE FROM CONTACTS WHERE AGE > 25 offset 5 sample 5 не работает. Я не распознаю эти ключевые слова и нет хорошей документации:-(

Примечание: Хотя это традиционно многозначная база данных, я использую не многозначные типы, но структура нормализована.

1 ответ

Решение

Это, безусловно, один из недостатков этой платформы. Я работал через это с чем-то похожим на следующую подпрограмму. Я должен был удалить кучу вещей для краткости, но это компилируется, поэтому он должен работать полностью без ошибок, верно?

Предостережения: Вы должны иметь элемент @SELECT DICT в каждом файле, который вы хотите использовать, содержащий все столбцы, которые вы хотите вернуть.

Многозначности становятся немного сложнее. Я сгладил данные, с которыми я использовал это, таким образом я не столкнулся с этой проблемой, но это не делает UNNEST.

Также может потребоваться добавить значение, указывающее, сколько всего записей, и, возможно, отработать какую-то передачу токенов и сохранение списка, чтобы сократить выполнение запроса при каждом его выполнении, но это намного, намного глубже, чем основной вопрос. под рукой.

SUBROUTINE SQLSelectWithOffset(TableName,UVWithClause,Starting,Offset)
***********************************************************************
* PROGRAM ID:     SQLSelectWithOffset
*
* PROGRAM TITLE:  SQLSelectWithOffset
*
* DESCRIPTION:    Universe doesn't support sql commands using starting and offset
*                 which makes life hard when you want all of a file
*                 but you choke on the size. Tokens allow for the selectlist to be saved
*                 TableName = UV FIle to select on. If this is blank program will return the number of records remaining
*                 UVWithClause = Your critera, WITH or BY criteria you want in a sort select. 
*                 Starting = Holds you place in line
*                 Offest = How many records to return 
************************************************************************
  $INCLUDE UNIVERSE.INCLUDE ODBC.H
  RETURN.LIST = ""
  IF Starting = "" or Starting < 1 THEN
     Starting = 1
  END
  GOSUB GET.MASTER.LIST
  FOR X=Starting TO Offset
     ID = EXTRACT(FULL.LIST,X,0,0)
     IF ID = "" THEN CONTINUE
     RETURN.LIST<-1> = ID
  NEXT X
  SELECT RETURN.LIST TO 9
  SQLSTMT ="SELECT * FROM ":TableName:" SLIST 9"
  ST=SQLExecDirect(@HSTMT, SQLSTMT)
RETURN
GET.MASTER.LIST:
  STMT = "SSELECT ":TableName
  IF UVWithClause NE "" THEN
     STMT := " ":UVWithClause
  END
  EXECUTE "CLEARSELECT"
  EXECUTE STMT
  READLIST FULL.LIST ELSE FULL.LIST = ""

RETURN

END

Удачи, пожалуйста, используйте эту информацию только для пользы!

Другие вопросы по тегам