这当然是这个平台的缺点之一。我过去曾使用类似于以下子例程的方法来解决此问题。为简洁起见,我不得不删除一堆东西,但是它可以编译,所以它必须完全没有错误,对吧?
注意事项:您需要在要使用它的每个文件中包含 @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
祝你好运,请只使用此信息!