我使用他们的.net驱动程序连接到Universe数据库(来自火箭软件)。我想按页面按用户请求获取数据,即进行分页。对于我们可以使用的其他数据库(偏移获取)但是Universe db似乎不支持它。它无法识别关键字偏移量
SELECT NAME, AGE FROM CONTACTS WHERE AGE > 25 offset 5 sample 5
不起作用。我不认识那些关键字,也没有好的文档: - (
注意:虽然它传统上是一个多值数据库,但我使用的数据库不使用多值类型,但结构已标准化。
答案 0 :(得分:1)
这肯定是这个平台的缺点之一。我过去经历过类似于以下子程序的事情。为了简洁起见,我不得不删除一堆东西,但这会编译所以它必须完全没有bug,对吗?
注意事项:您需要在每个要使用此文件的文件中包含@SELECT DICT项,其中包含您要返回的所有列。
多元化变得有点棘手。我曾经把我使用过的数据弄平了,所以我没有碰到那个问题,但这并没有做UNNESTs。
此外,您可能希望添加一个值,说明总共有多少记录,并且可能会计算出某种令牌传递和列表保存,以便在每次运行时减少执行查询但是这比得到的要多得多手头的基本问题。
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
祝你好运,请只使用这些信息!