--大概如下 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
游标中可以使用参数 cursor c_1 ( flag in number ) is select col1 from tablename where yourvar = flag ;
楼上可行. 直接将入参写到cursor定义的条件里也是可以的. 或者用动态cursor
这样子做我是知道的,主要我想用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的条件比我举得例子要复杂,没有办法用函数去做的那种 如果只想用一个游标要怎么做,谢谢!
这样做的话是不是就没有办法利用for循环了?
你使用个or不就行了select * from tmp_table where (flag = 1 and col1 = abc, and col2 = cba) or (flag = 0 and col3 = 123, and col4 = 321)
自己真土 谢谢oraclefans,结贴撒分!
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)
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
cursor c_1 ( flag in number ) is
select col1
from tablename
where yourvar = flag ;
直接将入参写到cursor定义的条件里也是可以的.
或者用动态cursor
功能上类似于
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的条件比我举得例子要复杂,没有办法用函数去做的那种
如果只想用一个游标要怎么做,谢谢!
你使用个or不就行了select *
from tmp_table
where (flag = 1 and col1 = abc, and col2 = cba)
or (flag = 0 and col3 = 123, and col4 = 321)
自己真土
谢谢oraclefans,结贴撒分!
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)