例如传入一个flag
当flag=1和flag=0时where条件语句会不相同
因为在声明段声明cursor时没有办法用条件语句,而自己又不想用两个cursor去做
求大侠解答

解决方案 »

  1.   

    --大概如下
    declare
    type refempcur is ref cursor;
    empcur refempcur;
    flag int;
    begin
    flag:=&flag;--输入flag的值
    if flag=0 then
    open empcur for select * from emp where sal<2000;
    elsif flag=1 then 
    open empcur for select  * from emp where sal>3000;
    end if;
    fetch empcur into ...
    end
      

  2.   

    游标中可以使用参数
    cursor  c_1 ( flag in number ) is
    select col1 
    from tablename
    where yourvar = flag ;
      

  3.   

    楼上可行.
    直接将入参写到cursor定义的条件里也是可以的.
    或者用动态cursor
      

  4.   

    这样子做我是知道的,主要我想用flag做一个开关,当flag=0是where子句是一个条件,flag=1时where子句是一个条件,这两个条件是完全不同的,且与flag无关
    功能上类似于
    if(flag=1)
    sql=select * from tmp_table where col1=abc,and col2=cba
    else if(flag=0)
    sql=select * from tmp_table where col3=123,and col4=321where的条件比我举得例子要复杂,没有办法用函数去做的那种
    如果只想用一个游标要怎么做,谢谢!
      

  5.   

    这样做的话是不是就没有办法利用for循环了?
      

  6.   


    你使用个or不就行了select *
      from tmp_table
     where (flag = 1 and col1 = abc, and col2 = cba)
        or (flag = 0 and col3 = 123, and col4 = 321)
      

  7.   


    自己真土
    谢谢oraclefans,结贴撒分!
      

  8.   


    cursor cur is 
    select *  from tmp_table
        where (flag = 1 and col1 = abc and col2 = cba)
              or (flag = 0 and col3 = 123 and col4 = 321)