Sql Oracle程序用pageNumber和pagesize作为输入参数,应该输出一个记录集显示错误
我是甲骨文新手。我需要创建一个过程来向应用程序返回一些详细信息。Pagenumber和pagesize作为输入参数传递。需要在P_记录集中获取结果。我不知道我写的是对的。现在,“SQL语句被忽略”的语句出现错误Sql Oracle程序用pageNumber和pagesize作为输入参数,应该输出一个记录集显示错误,sql,oracle,oracle11g,Sql,Oracle,Oracle11g,我是甲骨文新手。我需要创建一个过程来向应用程序返回一些详细信息。Pagenumber和pagesize作为输入参数传递。需要在P_记录集中获取结果。我不知道我写的是对的。现在,“SQL语句被忽略”的语句出现错误 CREATE OR REPLACE PROCEDURE INTEGRATION_PRO (PAGENUMBER IN INT := 1, ROWCOUNT in INT := 10, P_RECORDSET OUT TYPES.CURSORTYPE) As BEGIN
CREATE OR REPLACE PROCEDURE INTEGRATION_PRO
(PAGENUMBER IN INT := 1,
ROWCOUNT in INT := 10,
P_RECORDSET OUT TYPES.CURSORTYPE)
As
BEGIN
WITH TempResult AS(
SELECT *
FROM PERMIT
),
TempCount AS (
SELECT COUNT(*) AS MaxRows FROM PERMIT)
SELECT *
FROM TempResult, TempCount
ORDER BY TEMPRESULT.APPLICATION_REF_ID
OFFSET (@PageNum-1)*@PageSize ROWS
FETCH NEXT @PageSize ROWS ONLY
open P_RECORDSET for SELECT *
FROM TempResult, TempCount
ORDER BY TEMPRESULT.APPLICATION_REF_ID
OFFSET (@PageNum-1)*@PageSize ROWS
FETCH NEXT @PageSize ROWS ONLY
END INTEGRATION_PRO;
GO
这是oracle数据库,您在其中使用了许多其他语言代码 我已将您的代码更正如下(请参阅内联注释以了解说明):
您的代码有太多问题。您可以简单地使用下面的代码-
CREATE OR REPLACE PROCEDURE INTEGRATION_PRO (PAGENUMBER IN INT DEFAULT 1,
ROWCOUNT IN INT DEFAULT 10,
P_RECORDSET OUT TYPES.CURSORTYPE)
As
BEGIN
OPEN P_RECORDSET FOR
WITH TempCount AS (
SELECT COUNT(*) AS MaxRows FROM PERMIT)
SELECT *
FROM PERMIT, TempCount
WHERE id = 10
ORDER BY PERMIT.APPLICATION_REF_ID
OFFSET (PAGENUMBER - 1) * ROWCOUNT ROWS
FETCH NEXT ROWCOUNT ROWS ONLY;
END INTEGRATION_PRO;
在PL/SQL(或标准SQL)中,将
@
用作标识符的一部分是无效的。此外:CTEtempresult
完全无用。在Oracle(或至少在大多数Oracle工具中)Tejash中,程序需要使用/
,我认为偏移量(ROWCOUNT-1)*页码行
必须是偏移量(PAGENUMBER-1)*行数行
,这取决于OP。我刚刚纠正了语法错误,如果您只是按照OPs的意图进行,他需要第一次选择前10行,然后获取下10行。所以它必须是OFFSET(PAGENUMBER-1)*ROWCOUNT ROWS
,即OFFSET(1-1)*10=0
行,然后是OFFSET(2-1)*10=10
行,依此类推。在第二个select查询中,我在哪里给出where子句?'select*FROM PROPERMICT where id=10,TEMPCUNT'显示错误OK。还有一个疑问,当我运行这个过程时,它没有显示结果集。需要什么查询来显示结果?要返回结果,需要确保查询返回了一些数据。单独运行查询,看看它是否返回某些内容?如果查询提供了一些数据,则过程必须返回数据。
CREATE OR REPLACE PROCEDURE INTEGRATION_PRO (PAGENUMBER IN INT DEFAULT 1,
ROWCOUNT IN INT DEFAULT 10,
P_RECORDSET OUT TYPES.CURSORTYPE)
As
BEGIN
OPEN P_RECORDSET FOR
WITH TempCount AS (
SELECT COUNT(*) AS MaxRows FROM PERMIT)
SELECT *
FROM PERMIT, TempCount
WHERE id = 10
ORDER BY PERMIT.APPLICATION_REF_ID
OFFSET (PAGENUMBER - 1) * ROWCOUNT ROWS
FETCH NEXT ROWCOUNT ROWS ONLY;
END INTEGRATION_PRO;