如何在使用oracle的过程中使用ComparisonPredicate作为查询的一部分

时间:2013-06-14 05:04:08

标签: oracle plsql

我正在编写一个查询,我根据Equals,Not Equals和Starts With等值检查列值。我想将这些值动态传递给查询。任何人都可以建议我。

SELECT * FROM EMP E WHERE E.SAL >= 30000

我应该能够在程序中动态传递> =,=&lt ;,请建议我设计。

更新

这就是我要找的东西

SELECT e.ename,e.empno,e.job,e.sal,d.deptno
FROM   DEPT D,emp  e
WHERE  d.deptno = e.deptno
AND CASE
WHEN e.deptno = 10
AND  e.sal >= 1000 and e.name like('%j')
-- THEN e.name like('%j')
THEN 1
ELSE 0
END = 1;

我想念了那个。我们只能将表达作为其中的一部分。

谢谢大家。

2 个答案:

答案 0 :(得分:1)

不要忽视简单的方法:

CASE in_comparison_operator
WHEN '>=' THEN
  SELECT * INTO ... FROM EMP E WHERE E.SAL >= 30000;
WHEN '<=' THEN
  SELECT * INTO ... FROM EMP E WHERE E.SAL <= 30000;
WHEN 'LIKE' THEN
  SELECT * INTO ... FROM EMP E WHERE E.ENAME like ('J%');
END;

答案 1 :(得分:0)

你必须根据if else条件编写一些动态存储过程。 以下是一个想法,其余的你可以在这里实现你的登录

create procedure DynamicQuery
@ColumnName varchar(20),
@Operator varchar(10),
@Value varchar(10)
as

declare @qry nvarchar(max)
set @qry = 'select * from Emp e where ' + @ColumnName + ' '
if(@Operator = 'like')
begin
set @qry = @qry + ' like (''' + @Value + ''')'
end

else
begin
set @qry = @qry + ' ' + @Operator + ' '  + @Value 
end
print @qry

exec sp_executesql @qry