Sql Oracle程序用pageNumber和pagesize作为输入参数,应该输出一个记录集显示错误

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

我是甲骨文新手。我需要创建一个过程来向应用程序返回一些详细信息。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  

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)中,将
@
用作标识符的一部分是无效的。此外:CTE
tempresult
完全无用。在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;