不推荐这样做。and sex like decode(:s_sex, null, '%', :s_sex)
也就是说这种写法是支持的?可是在sqlPlus里貌似会提示SQl语句未结束,这是为什么呢?
没有问题的,我试过,这个里面'%',这里的逗号是中文的,可能是这里导致的。一下是我做的实验 SQL> variable s_sex varchar2(10); SQL> select * from (select '1' sex, 'David' name from dual union select '0' sex, 'Janes' name from dual) where sex like decode(:s_sex, null, '%',:s_sex); S NAME - ----- 0 Janes 1 David 这里没有定义s_sex的值,所以条件不生效SQL> exec :s_sex := 1; 再执行同样的语句,生效,只有一条sex=1返回 S NAME - ----- 1 David SQL> exec :s_sex := 0; 再执行同样的语句,生效,只有一条sex=0返回 S NAME - ----- 0 Janes
哦 原来decode相当于if then else 啊 这招不错,呵呵.那方括号语法呢?应该如何使用啊? String qrySql = "select id,name,sex from STUDENT"+ "where name = :s_name"+ "[and sex = :s_sex]"
String qrySql = "select id,name,sex from STUDENT"+ "where name = :s_name"+ "[and sex = :s_sex]" 这样的java写法第一次看见,1楼的讲解一下塞。
也就是说这种写法是支持的?可是在sqlPlus里貌似会提示SQl语句未结束,这是为什么呢?
没有问题的,我试过,这个里面'%',这里的逗号是中文的,可能是这里导致的。一下是我做的实验
SQL> variable s_sex varchar2(10);
SQL> select * from (select '1' sex, 'David' name from dual union select '0' sex,
'Janes' name from dual) where sex like decode(:s_sex, null, '%',:s_sex);
S NAME
- -----
0 Janes
1 David
这里没有定义s_sex的值,所以条件不生效SQL> exec :s_sex := 1;
再执行同样的语句,生效,只有一条sex=1返回
S NAME
- -----
1 David
SQL> exec :s_sex := 0;
再执行同样的语句,生效,只有一条sex=0返回
S NAME
- -----
0 Janes
哦 原来decode相当于if then else 啊 这招不错,呵呵.那方括号语法呢?应该如何使用啊?
String qrySql = "select id,name,sex from STUDENT"+
"where name = :s_name"+
"[and sex = :s_sex]"
"where name = :s_name"+
"[and sex = :s_sex]"
这样的java写法第一次看见,1楼的讲解一下塞。