oracle 判断sql语句

jiangtan273405 2012-02-02 10:03:27
我想做个类似if(1==1){
where a=a
}else{
where b=b
}
用oracle能实现吗?
比如:select * from aa表 where if(1==1){a=1条件一}else{b=2条件二}
...全文
247 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
晨与飞扬 2012-02-07
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 hj_daxian 的回复:]
引用 3 楼 luiseradl 的回复:

大概意思就是where条件是变化的罢,根据其它的列的值。
可以使用union
请参考:
SQL code

SELECT * FROM 表名
WHERE 列名1 = 特定值 AND 列名2 = 某个值
UNION
SELECT * FROM 表名
WHERE 列名1 != 特定值 AND 列名2 = 另外某个值;

这个应……
[/Quote]

偶怎么感觉下边这段代码好傻啊?
Larry 2012-02-03
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 swot2ly 的回复:]
SQL code
SELECT * FROM TAB1
WHERE (FIELD1 = 'A' AND FIELD2 = 'B')
OR (FIELD1 <> 'A' AND FIELD3 = 'C')
[/Quote]

FIELD1 = 'A' 和 FIELD1 <> 'A' 这2个条件只有1个成立
所以(FIELD1 = 'A' AND FIELD2 = 'B') 等价于 IF(TRUE){...}
(FIELD1 <> 'A' AND FIELD3 = 'C') 等价于 ELSE{...}
strive_bo 2012-02-03
  • 打赏
  • 举报
回复
用oracle的 decode 或者
SELECT CASE
WHEN COL > 1 THEN
'1'
ELSE
'4'
END
FROM TABLE
应该可以实现,或者可以用存储过程
Felixzhaowenzhong 2012-02-03
  • 打赏
  • 举报
回复
if (1=1) then
...;
elsif 1=2 then
..;
else
..;
end if;
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 luiseradl 的回复:]

大概意思就是where条件是变化的罢,根据其它的列的值。
可以使用union
请参考:
SQL code

SELECT * FROM 表名
WHERE 列名1 = 特定值 AND 列名2 = 某个值
UNION
SELECT * FROM 表名
WHERE 列名1 != 特定值 AND 列名2 = 另外某个值;
[/Quote]
这个应该可以满足要求了


select * from aa表
where 1==1 and a=条件一
union all
select * from aa表
where 1<>1 and b=条件二
我心飞翔 2012-02-02
  • 打赏
  • 举报
回复
大概意思就是where条件是变化的罢,根据其它的列的值。
可以使用union
请参考:

SELECT * FROM 表名
WHERE 列名1 = 特定值 AND 列名2 = 某个值
UNION
SELECT * FROM 表名
WHERE 列名1 != 特定值 AND 列名2 = 另外某个值;

jiangtan273405 2012-02-02
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 hj_daxian 的回复:]

引用 3 楼 luiseradl 的回复:

大概意思就是where条件是变化的罢,根据其它的列的值。
可以使用union
请参考:
SQL code

SELECT * FROM 表名
WHERE 列名1 = 特定值 AND 列名2 = 某个值
UNION
SELECT * FROM 表名
WHERE 列名1 != 特定值 AND 列名2 = 另外某个值;

这个……
[/Quote]
我试试看可不可以。
jiangtan273405 2012-02-02
  • 打赏
  • 举报
回复
大家弄错我的意思,不好意思啊!我的意思是where后面加的是SQL语句比如,select* from 表名 where if(true){表名.name='张三'}else{
表名.id=263547
}
这个意思。因为某些原因我不能写存储过程,不能在后台进行sql拼接。只能用SQL语句弄出来。
hupeng213 2012-02-02
  • 打赏
  • 举报
回复
declare
counted int := 0;
strSql varchar2(1000) := '';
begin
strSql := 'select count(1) from hi_indicators';
execute immediate strSql into counted;
if (counted = 0) then
dbms_output.put_line('the table is empty.');
else
dbms_output.put_line('the table has ' || to_char(counted) || ' records');
end if;
end;

--结果
the table has 46 records
dangmao 2012-02-02
  • 打赏
  • 举报
回复
case?
reg13141 2012-02-02
  • 打赏
  • 举报
回复
你可以使用存储过程写啊,
Larry 2012-02-02
  • 打赏
  • 举报
回复
SELECT * FROM TAB1
WHERE (FIELD1 = 'A' AND FIELD2 = 'B')
OR (FIELD1 <> 'A' AND FIELD3 = 'C')
toadzw 2012-02-02
  • 打赏
  • 举报
回复
存储过程的东西;

17,078

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧