Как сделать выборку страниц при запросе базы данных юниверса с использованием.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
Удачи, пожалуйста, используйте эту информацию только для пользы!