可能有的人已经看到了我的StrWhere变量中的字段名没有加表名前缀,现在把StrWhere变量去除也不行.
也就是不用StrWhere
即:
  if StrWhere is not null then
     strSql := StrSql;
  end if;
我的Sql语句是没有问题,只是Open...For...有点问题!请高手来指点一下吧!Oracle的帮助里面说是可以的!
DECLARE
   TYPE EmpCurTyp IS REF CURSOR;  -- define weak REF CURSOR type
   emp_cv   EmpCurTyp;  -- declare cursor variable
   my_ename VARCHAR2(15);
   my_sal   NUMBER := 1000;
BEGIN
   OPEN emp_cv FOR  -- open cursor variable
      'SELECT ename, sal FROM emp WHERE sal > :s' USING my_sal;
   ...
END;
这是帮助里面的例子!
我用的是PL/SQL
在我的机器里这样子写就可以:
open prmList for
  Select * from CFY001;
也就是说可以直接用语句!不能用字符串或变量!

解决方案 »

  1.   

    错误还是一样的!我已经把过程单写出来了,而且已经精减到这样了还是不行,我记得以前在8.17下用是可以的!不知道8.0.5是不是需要设置什么参数呀?
      create or replace procedure 
      prc_TestList( prmAppCode out Number, --过程执行返回的代码
                         prmErrMsg  out VarChar2) --过程执行返回的信息
    is
       strSql Varchar2(255);
       type c is REf Cursor ;
       curTemp C;
    begin
      StrSql := 'Select A.BM0001,A.MC0001,A.LXDH01,A.LXSJ01,A.ZT0001,B.YYZF01 as ZT0002 From CFY001 A,ZHCS01 B '||
    ' Where B.MC0001 =''CFYZT1'' and B.BL0001 = A.ZT0001';
      Open curTemp for StrSql ;  
      exception 
         when others then
         prmAppcode := -2009;
         prmErrMsg  := '执行返回错误';
    end ;
      

  2.   

    我的是8.17用这种语法结构可以用!建议你把Oracle升级一下!如果有可能的话!