create table test( id VARCHAR2(10), name VARCHAR2(30) );INSERT INTO test(id,name) values('1','luoyoumou1'); INSERT INTO test(id,name) values('3','luoyoumou3'); INSERT INTO test(id,name) values('7','luoyoumou7'); INSERT INTO test(id,name) values('13','luoyoumou13'); INSERT INTO test(id,name) values('21','luoyoumou21'); INSERT INTO test(id,name) values('21','1'); COMMIT;select t.*, t.rowid from test t where t.name='1' and t.id=decode('&in_id',1,'21',t.id);
and or ()组合不能表示if么?
and 前后为真则真 or 单个为真则真 你的意图是如果满足某个条件的话追加and t.id= '21' 这个单个语名的话 按三楼的方式变通解决 如果是业务需求的话,可以在程序中或写存储过程解决!
比如t.id=decode(:in_id,1,'21',t.id)
select t.*, t.rowid
from test t
where t.name = '1'
and t.id = '21';
不知道你对DECODE熟悉吗?我解释下这个,这是我们经常用的,类似IF的效果
如果传进来的条件:in_id=1的话,那这个where条件就是t.id='21'
如果不是1的话,条件就变成了t.id=t.id
create table test(
id VARCHAR2(10),
name VARCHAR2(30)
);INSERT INTO test(id,name) values('1','luoyoumou1');
INSERT INTO test(id,name) values('3','luoyoumou3');
INSERT INTO test(id,name) values('7','luoyoumou7');
INSERT INTO test(id,name) values('13','luoyoumou13');
INSERT INTO test(id,name) values('21','luoyoumou21');
INSERT INTO test(id,name) values('21','1');
COMMIT;select t.*, t.rowid
from test t
where t.name='1'
and t.id=decode('&in_id',1,'21',t.id);
or 单个为真则真
你的意图是如果满足某个条件的话追加and t.id= '21' 这个单个语名的话
按三楼的方式变通解决
如果是业务需求的话,可以在程序中或写存储过程解决!
用decode或者case when语句来判断。当然你可以在plsql块里面 用动态语句来写if判断。
DECODE,CASE WHEN 或动态sql。
DECODE,CASE WHEN 或动态sql
DECODE,CASE WHEN 或动态sql
当t.id='21 '的时候就实现不了了,如何可以忽略空格呢?
不能用if ,但是可以用case when
select * from tb
where id=(case when num=1 then 5 else id end)
where id=(case when num=1 then 5 else id end)
这种语句运行,
和ORACLE版本有关么