鉴于此伪代码
create or replace procedure my_test
( arg1 IN varchar2 )
begin
select var1, var2, var3 from table1
where
var1 in (select var1 from table2)
if(arg1 = 'some_val')
and
var2 < 100
end if;
end;
现在,我知道if
条款中不允许使用where
个语句,而且case
语句的所有示例我只看到变量赋值(而不是执行一个条款)(例如here和here和here)。
是否可以使用case
过滤条件依赖于参数函数的where子句,或者是使用动态SQL的唯一方法?
答案 0 :(得分:5)
您可以轻松地将伪代码转换为SQL逻辑:
var db = getDB('test');
注意:您需要注意.directive('numberToString', function () {
return {
require: 'ngModel',
link: function (scope, element, attrs, ngModel) {
ngModel.$parsers.push(function (value) {
return '' + value;
});
ngModel.$formatters.push(function (value) {
return value+'';
});
}
}
});
值。
而且,这可以简化为:
select var1, var2, var3
from table1
where var1 in (select var1 from table2) and
((arg1 = 'some_val' and var2 < 100) or
(arg1 <> 'some_val')
);
另外,最好在变量前加上一些东西,这样它们就不会与列名混淆。
答案 1 :(得分:1)
您似乎只能在and
和or
条件下执行此操作。
where var1 in (select var1 from table2)
and ((arg1 = 'some_val' and var2 < 100) or
arg1 != 'some_val')
当然,一个程序不能像这样做一个裸select
。您需要将结果存储在某处,打开sys_refcursor
等等。
答案 2 :(得分:1)
您可以使用逻辑or
运算符来模拟此行为:
SELECT var1, var2, var3
FROM table1
WHERE var1 IN (SELECT var1 FROM table2) AND
(arg1 != 'some_val' OR var2 < 100)