如下:
create or replace procedure Inset_Differ_ForApprove(strsql In Varchar2) Is
ls_sql Varchar2(1000);CURSOR approve_i Is
select * from tab where || ls_sql || group by tid order by id desc...
编译报错:PLS-00103: 出现符号 "GROUP"在需要下列之一时:
       (-+modnull<an identifier>
          <a double-quoted delimited-identifier><a bind variable>avg
          countcurrentmaxminpriorsqlstddevsumvarianceexecuteforalltime
          timestampintervaldate
          <a string literal with character set specification>
          <a number><a single-quoted SQL string>
       符号 "null" 被替换为 "GROUP" 后继续
如果是这样写select * from tab where || ls_sql group by tid order by id desc
...
则报“无效的数字”
请问如何解决。谢谢

解决方案 »

  1.   

    ls_sql字符串形式如:
    当有值时:and ceatedate>=to_date('2006-6-6','yyyy-MM-dd')
    否则:and 1=1
      

  2.   

    where || ls_sql where后面不应该有and
      

  3.   

    select * from tab where || ls_sql group by tid order by id desc这样写肯定不对的v_sql:= 'select * from tab where ' || ls_sql || 'group by tid order by id desc';
      

  4.   

    To icedut(冰) 
    这样的的是动态SQL吧。动态SQL如何执行。又如何取值呢。谢谢我对oracle刚用,很多东西不懂。谢谢各位的帮忙!
      

  5.   

    excute immediate v_sql into l_col1, l_col2, ...
      

  6.   

    DECLARE v_cursor sys_refcursor;
    v_sql VARCHAR2(200);
    v_rec B_AREAS%ROWTYPE;
    BEGIN
    v_sql:='select * from b_areas';
    OPEN v_cursor FOR v_sql;
    LOOP
    FETCH v_cursor INTO v_rec;
    EXIT WHEN v_cursor%NOTFOUND;
    DBMS_OUTPUT.PUT_LINE (v_rec.area_id);
    END LOOP;
    END;
      

  7.   

    游标变量用得不多
    一般都用
    for的形式打开
      

  8.   

    过程名(strsql in varchar2)
    v_sql  VARCHAR2(200);  begin
     v_sql:='select * from table ';
     v_sql:=v_sql||strsql;
    ...测试报错:SQL命令未正确结束。???