不是啦 有个表A , 表里有pk_1,pk_2,pk_3三个key 我想:i_1=1,就SELECT * FROM A WHERE PK_1 = 10....... 否则 ,就SELECT * FROM A WHERE ........ 不要pk_1这个条件了
create or replace procedure test( i_1 number, i_2 number, i_3 number) as begin if(i_1 = 1) then SELECT * FROM A WHERE PK_1 = 10; elsif(i_2 = 1) then SELECT * FROM A WHERE PK_2 = 10; ..... end if; end;
可实现: IF(i_1 = 1 AND i_2 = 1) THEN SELECT * FROM A WHERE PK_1 = 10 AND PK_2 = 10..... ELSIF(i_1 <> 1 AND i_2 = 1)THEN SELECT * FROM A WHERE PK_2 = 10..... ELSIF(i_1 = 1 AND i_2 <> 1)THEN SELECT * FROM A WHERE PK_1 = 10..... ELSIF(i_1 <> 1 AND i_2 <> 1)THEN SELECT * FROM A WHERE ..... 好长啊 !! 有没有简单点方法呀??
你可以换成这个 select * from A where decode(i_1,1,PK_1,decode(i_2,1,PK_2)) = 10;不过这样不是同时可以等于1的
.... swich(...) { case ... : ...; case ... : ...; ... ... }
select * from a where decode(i_1,1,pk_1,1)=10 union all select * from a where decode(i_2,1,pk_2,1)=10 union all select * from a where decode(i_3,1,pk_3,1)=10
问beckhambobo: select * from a where decode(i_1,1,pk_1,10)=10 AND decode(i_2,1,pk_2,10)=10 AND decode(i_3,1,pk_3,10)=10;对吗???
我想:i_1=1,就SELECT * FROM A WHERE PK_1 = 10.......
否则 ,就SELECT * FROM A WHERE ........
不要pk_1这个条件了
i_1 number,
i_2 number,
i_3 number) as
begin
if(i_1 = 1) then
SELECT * FROM A WHERE PK_1 = 10;
elsif(i_2 = 1) then
SELECT * FROM A WHERE PK_2 = 10;
.....
end if;
end;
IF(i_1 = 1 AND i_2 = 1) THEN
SELECT * FROM A WHERE PK_1 = 10 AND PK_2 = 10.....
ELSIF(i_1 <> 1 AND i_2 = 1)THEN
SELECT * FROM A WHERE PK_2 = 10.....
ELSIF(i_1 = 1 AND i_2 <> 1)THEN
SELECT * FROM A WHERE PK_1 = 10.....
ELSIF(i_1 <> 1 AND i_2 <> 1)THEN
SELECT * FROM A WHERE .....
好长啊 !! 有没有简单点方法呀??
swich(...)
{
case ... : ...;
case ... : ...;
...
...
}
union all
select * from a where decode(i_2,1,pk_2,1)=10
union all
select * from a where decode(i_3,1,pk_3,1)=10
select * from a where decode(i_1,1,pk_1,10)=10
AND decode(i_2,1,pk_2,10)=10
AND decode(i_3,1,pk_3,10)=10;对吗???
能不能解释一下decode?