你把 strWhere 直接放在select语句内,难道指望ORACLE预先给你制定了这样的SELECT语法?通常,此时你必须得用动态语句定义游标.CURSOR cSearch IS  
 'select ...' || strWhere || '...';

解决方案 »

  1.   

    这样构造的游标是不行的,需要用动态游标进行定义。除非你指定了where子句中的具体项目。而且,最好不要用中文字段名。
      

  2.   

    动态游标declare    TYPE t_refcur is ref cursor ;
       cs_tmp t_refcur;
       
       v_val1  tab1.col1%type;
       v_val2  tab1.col2%type;
    begin   OPEN cs_tmp for ' SELECT col1 , col2  FROM tab1 WHERE 1 = 1 ' || strWhere ;
       
       --fetch value
       fetch cs_tmp into v_val1 , v_val2;
       
    end;其他使用可定义record 或者
      

  3.   

    最近这样的问题好多啊
    怎么就不能自己翻一翻呢sql语句用str来表示
    然后execute immediate str就可以了
    str写法见1楼