Psql 不可以赋值,它是被in 限制了的,只可以被引用,可以这样做:
v_Psql varchar2(300):=Psql;
或者v_Psql := 'select rownum rn,t.* from cd_ssxl t' ;  其他这样用的肯定也有这个问题,试着改一下就没问题了

解决方案 »

  1.   

    我也在做这个分页(下面的代码是我从网上找到的,我在C#下用微软自带的using System.Data.OracleClient能通过但用oracle using Oracle.DataAccess不能通过说 
    以下是在oracle中实现的分页存储过程。create or replace package DotNet is  -- Author  : good_hy
      -- Created : 2004-12-13 13:30:30
      -- Purpose : 
      
      TYPE type_cur IS REF CURSOR;     --定义游标变量用于返回记录集
        
      PROCEDURE DotNetPagination(      
      Pindex in number,                --分页索引   
      Psql in varchar2,                --产生dataset的sql语句
      Psize in number,                 --页面大小
      Pcount out number,               --返回分页总数
      v_cur out type_cur               --返回当前页数据记录
      );  
      
      procedure DotNetPageRecordsCount(
      Psqlcount in varchar2,           --产生dataset的sql语句                           
      Prcount   out number             --返回记录总数
      );
      
    end DotNot;--------------------------------------------------------------------------------------------------------------------------------------------------------------------create or replace package body DotNet is --***************************************************************************************
     
     PROCEDURE DotNetPagination(
      Pindex in number,
      Psql in varchar2, 
      Psize in number,  
      Pcount out number,
      v_cur out type_cur
     )
     AS  v_sql VARCHAR2(1000);
      v_count number;  
      v_Plow number;
      v_Phei number;
     Begin
      ------------------------------------------------------------取分页总数
      v_sql := 'select count(*) from (' || Psql || ')';
      execute immediate v_sql into v_count;
      Pcount := ceil(v_count/Psize);
      ------------------------------------------------------------显示任意页内容
      v_Phei := Pindex * Psize + Psize;
      v_Plow := v_Phei - Psize + 1;
      --Psql := 'select rownum rn,t.* from cd_ssxl t' ;            --要求必须包含rownum字段
      v_sql := 'select * from (' || Psql || ') where rn between ' || v_Plow || ' and ' || v_Phei ;  open v_cur for v_sql;
      
     End DotNetPagination;
     
     --**************************************************************************************
     
     procedure DotNetPageRecordsCount(
      Psqlcount in varchar2,
      Prcount   out number
      )
      as
      
       v_sql varchar2(1000);
       v_prcount number;
       
      begin
      
       v_sql := 'select count(*) from (' || Psqlcount || ')';
       execute immediate v_sql into v_prcount;
       Prcount := v_prcount;                  --返回记录总数                                                      
       
      end DotNetPageRecordsCount;
      
     --**************************************************************************************
     
    end DotNot;
      

  2.   

    我也是从网上找的这段代码,但是复制到SQL*Plus中根本就执行不了,提示有编译错误。我这样创建一个包不行吗?请高手指点。
      

  3.   

    问题解决了。谢谢liuylei(劲岩), clzhx(赵),我是按照liuylei的提示解决的。clzhx 你也参考一下。