在ORACLE存储过程中,我定义了一个变量
DECLARE  TEMPSQL NVARCHAR2(2000);  --SQL语句
TABLENAME NVARCHAR2(100);          --表名
TEMPID   NUMBER;                  --字段ID的参数
TYPE T_CUR IS REF CURSOR;         
CUR  T_CUR;                       --声明一个指针
TEMPSQL='SELECT * FROM '||TABLENAME||' WHERE ID='||TEMPID||'';
当我打开指针的时候报错:(无效的SQL语句)
我采用的方法是:OPEN CUR FOR '||TEMPSQL||';
请高手指点下,我OPEN指针时的语法错误....

解决方案 »

  1.   


    OPEN CUR FOR TEMPSQL;
      

  2.   


    DECLARE
      TEMPSQL NVARCHAR2(2000) ; --SQL语句
      tablename NVARCHAR2(100); --表名
      tempid  NUMBER; --字段ID的参数
      cur     sys_refcursor; --声明一个指针
    begin
      TEMPSQL := 'SELECT * FROM ' || TABLENAME || ' WHERE ID=''' || TEMPID || '''' ; open cur for
                 tempsql;
      loop
        fetch cur
          into xxxx;
        exit when cur%notfound
        --to do sth
        end loop;
      end;
      

  3.   

    open cur for
                 tempsql;
     提示表达式错误
      

  4.   

    open cur for
      tempsql;
     提示表达式类型错误
      

  5.   

    TEMPSQL='SELECT * FROM '||TABLENAME||' WHERE ID='||TEMPID||''
    -------改成这样。。
    TEMPSQL := 'SELECT * FROM ' || TABLENAME || ' WHERE ID=''' || TEMPID || ''''
      

  6.   


    --TEMPID NUMBER; --字段ID的参数  id 是number类型
    TEMPSQL='SELECT * FROM  '||TABLENAME||'  WHERE ID='||TEMPID||;--TEMPID NUMBER; --字段ID的参数    id 是varchar2类型TEMPSQL='SELECT * FROM  '||TABLENAME||'  WHERE ID='''||TEMPID||'''';
      

  7.   


    --TEMPID NUMBER; --字段ID的参数  id 是number类型
    TEMPSQL:='SELECT * FROM  '||TABLENAME||'  WHERE ID='||TEMPID||;--TEMPID NUMBER; --字段ID的参数    id 是varchar2类型TEMPSQL:='SELECT * FROM  '||TABLENAME||'  WHERE ID='''||TEMPID||'''';
      

  8.   

      open curs1 for 'SELECT * FROM  '||TABLENAME||'  WHERE ID='''||ptagid||'''';
    但是还是提示错误
      

  9.   

    OPEN CUR FOR TEMPSQL;
    loop
    ...
    end loop;
    close cur;