SELECT * FROM TABLE A WHERE A.RATE_PLAN_TYPE=?这样可以看懂了吧 用动态SQL来处理吧,通过拼接SQL语句
SELECT * FROM TABLE A WHERE ((?=1 and (A.RATE_PLAN_TYPE=? or A.RATE_PLAN_TYPE is null)) or (?<>1 and A.RATE_PLAN_TYPE=?))
我知道可以在查询列中用if then来做 但是这个是查询条件 好像没办法了
SELECT * FROM TABLE A WHERE A.RATE_PLAN_TYPE<>'1' OR A.RATE_PLAN_TYPE IS NULL
SELECT * FROM TABLE A WHERE A.RATE_PLAN_TYPE=?这样可以看懂了吧 用动态SQL来处理吧,通过拼接SQL语句 不可以的 因为sql执行不通过程序 是通过框架的一个服务 所以代码改不了只能传一条要执行的sql进去
上面理解错了,看看是这样不? 假设传入的参数为V SELECT * FROM TABLE A WHERE A.RATE_PLAN_TYPE=V AND (V<>'1' OR A.RATE_PLAN_TYPE IS NULL)
SELECT * FROM TABLE A WHERE A.RATE_PLAN_TYPE=?这样可以看懂了吧 用动态SQL来处理吧,通过拼接SQL语句 不可以的 因为sql执行不通过程序 是通过框架的一个服务 所以代码改不了只能传一条要执行的sql进去SELECT * FROM TABLE A WHERE decode(?, '1', decode(A.RATE_PLAN_TYPE, '1', 'y', null, 'y', 'n'), decode(A.RATE_PLAN_TYPE, ?, 'y', 'n')) = 'y'
写一个存储过程一样的判断下declare type varchar2(10); if type=1 then select * from tb where RATE_PLAN_TYPE=1 or RATE_PLAN_TYPE is null; else select * from tb where RATE_PLAN_TYPE= type; end if
SELECT * FROM TABLE A WHERE A.RATE_PLAN_TYPE=?这样可以看懂了吧 用动态SQL来处理吧,通过拼接SQL语句 不可以的 因为sql执行不通过程序 是通过框架的一个服务 所以代码改不了只能传一条要执行的sql进去SELECT * FROM TABLE A WHERE decode(?, '1', decode(A.RATE_PLAN_TYPE, '1', 'y', null, 'y', 'n'), decode(A.RATE_PLAN_TYPE, ?, 'y', 'n')) = 'y'
两个都可以版主的这个decode没这样用过 请问decode(A.RATE_PLAN_TYPE, '1', 'y', null, 'y', 'n')有拼接A.RATE_PLAN_TYPE='1' OR A.RATE_PLAN_TYPE IS NULL的功能? 从最外层的decode来看是恒成立的吧
公司框架来执行查询类的sql,只给传sql执行。。
SELECT * FROM TABLE A WHERE A.RATE_PLAN_TYPE=?这样可以看懂了吧 用动态SQL来处理吧,通过拼接SQL语句 不可以的 因为sql执行不通过程序 是通过框架的一个服务 所以代码改不了只能传一条要执行的sql进去SELECT * FROM TABLE A WHERE decode(?, '1', decode(A.RATE_PLAN_TYPE, '1', 'y', null, 'y', 'n'), decode(A.RATE_PLAN_TYPE, ?, 'y', 'n')) = 'y'
两个都可以版主的这个decode没这样用过 请问decode(A.RATE_PLAN_TYPE, '1', 'y', null, 'y', 'n')有拼接A.RATE_PLAN_TYPE='1' OR A.RATE_PLAN_TYPE IS NULL的功能? 从最外层的decode来看是恒成立的吧 不是,这个是decode的嵌套使用
SELECT * FROM TABLE A WHERE A.RATE_PLAN_TYPE=? or (1=? and A.RATE_PLAN_TYPE is null)为了迁就框架的简单而使SQL语句复杂化,其实是不值得提倡的
接收的RATE_PLAN_TYPE为空的话是不是会有点问题?
应该不会传空吧,如果会传空值,首先a.rate_plan_type=?就不成立 若真有的话,再加个等式,如果为空,传入字符串‘null' 这个表达式越来越诡异了 where a.rate_plan_type=? or ('1'=? and rate_plan_type is null) or ('null'=? and rate_plan_type is null)
看完瞬间感觉逻辑紊乱了。你的两种情况加一块是一个全集吗?你的业务逻辑是这样吗? 现在有四种情况, 1.RATE_PLAN_TYPE=1 and A.RATE_PLAN_TYPE IS NULL 2.RATE_PLAN_TYPE=1 and A.RATE_PLAN_TYPE IS not NULL 3.RATE_PLAN_TYPE<>1 and A.RATE_PLAN_TYPE IS NULL 4.RATE_PLAN_TYPE<>1 and A.RATE_PLAN_TYPE IS not NULL 你说的第一种情况包括1、2、3,而你的第二种情况是想要不带or,也就是3、4
FROM TABLE A
WHERE A.RATE_PLAN_TYPE=?这样可以看懂了吧
用动态SQL来处理吧,通过拼接SQL语句
FROM TABLE A
WHERE ((?=1 and (A.RATE_PLAN_TYPE=? or A.RATE_PLAN_TYPE is null)) or (?<>1 and A.RATE_PLAN_TYPE=?))
FROM TABLE A
WHERE A.RATE_PLAN_TYPE<>'1' OR A.RATE_PLAN_TYPE IS NULL
FROM TABLE A
WHERE A.RATE_PLAN_TYPE=?这样可以看懂了吧
用动态SQL来处理吧,通过拼接SQL语句
不可以的 因为sql执行不通过程序 是通过框架的一个服务 所以代码改不了只能传一条要执行的sql进去
假设传入的参数为V
SELECT *
FROM TABLE A
WHERE A.RATE_PLAN_TYPE=V AND (V<>'1' OR A.RATE_PLAN_TYPE IS NULL)
FROM TABLE A
WHERE A.RATE_PLAN_TYPE=?这样可以看懂了吧
用动态SQL来处理吧,通过拼接SQL语句
不可以的 因为sql执行不通过程序 是通过框架的一个服务 所以代码改不了只能传一条要执行的sql进去SELECT *
FROM TABLE A
WHERE decode(?,
'1',
decode(A.RATE_PLAN_TYPE, '1', 'y', null, 'y', 'n'),
decode(A.RATE_PLAN_TYPE, ?, 'y', 'n')) = 'y'
if type=1 then
select * from tb where RATE_PLAN_TYPE=1 or RATE_PLAN_TYPE is null;
else
select * from tb where RATE_PLAN_TYPE= type;
end if
FROM TABLE A
WHERE A.RATE_PLAN_TYPE=?这样可以看懂了吧
用动态SQL来处理吧,通过拼接SQL语句
不可以的 因为sql执行不通过程序 是通过框架的一个服务 所以代码改不了只能传一条要执行的sql进去SELECT *
FROM TABLE A
WHERE decode(?,
'1',
decode(A.RATE_PLAN_TYPE, '1', 'y', null, 'y', 'n'),
decode(A.RATE_PLAN_TYPE, ?, 'y', 'n')) = 'y'
两个都可以版主的这个decode没这样用过 请问decode(A.RATE_PLAN_TYPE, '1', 'y', null, 'y', 'n')有拼接A.RATE_PLAN_TYPE='1' OR A.RATE_PLAN_TYPE IS NULL的功能? 从最外层的decode来看是恒成立的吧
公司框架来执行查询类的sql,只给传sql执行。。
FROM TABLE A
WHERE A.RATE_PLAN_TYPE=?这样可以看懂了吧
用动态SQL来处理吧,通过拼接SQL语句
不可以的 因为sql执行不通过程序 是通过框架的一个服务 所以代码改不了只能传一条要执行的sql进去SELECT *
FROM TABLE A
WHERE decode(?,
'1',
decode(A.RATE_PLAN_TYPE, '1', 'y', null, 'y', 'n'),
decode(A.RATE_PLAN_TYPE, ?, 'y', 'n')) = 'y'
两个都可以版主的这个decode没这样用过 请问decode(A.RATE_PLAN_TYPE, '1', 'y', null, 'y', 'n')有拼接A.RATE_PLAN_TYPE='1' OR A.RATE_PLAN_TYPE IS NULL的功能? 从最外层的decode来看是恒成立的吧
不是,这个是decode的嵌套使用
FROM TABLE A
WHERE A.RATE_PLAN_TYPE=? or (1=? and A.RATE_PLAN_TYPE is null)为了迁就框架的简单而使SQL语句复杂化,其实是不值得提倡的
若真有的话,再加个等式,如果为空,传入字符串‘null'
这个表达式越来越诡异了
where a.rate_plan_type=? or ('1'=? and rate_plan_type is null) or ('null'=? and rate_plan_type is null)
现在有四种情况,
1.RATE_PLAN_TYPE=1 and A.RATE_PLAN_TYPE IS NULL
2.RATE_PLAN_TYPE=1 and A.RATE_PLAN_TYPE IS not NULL
3.RATE_PLAN_TYPE<>1 and A.RATE_PLAN_TYPE IS NULL
4.RATE_PLAN_TYPE<>1 and A.RATE_PLAN_TYPE IS not NULL
你说的第一种情况包括1、2、3,而你的第二种情况是想要不带or,也就是3、4