Oracle SQL where 子句中的函数

Posted

技术标签:

【中文标题】Oracle SQL where 子句中的函数【英文标题】:Function in Oracle SQL where clause 【发布时间】:2019-09-09 06:37:13 【问题描述】:

我有一个这样的查询:

SELECT * 
FROM employees emp 
WHERE emp.loc = 'US' 
  AND usr.fnctn('emp_sal', :sal1, :sal2);

此查询导致错误:

ORA-00920: 无效的关系运算符

我的函数只返回employees 表中的最高和最低值

【问题讨论】:

你的问题在哪里,你想达到什么目标? 非常抱歉先生。刚刚编辑过。 您不能在 sql 中使用布尔值,因此 fnctn 必须返回其他内容,因此您需要一些关系来比较返回值。 你的函数返回两个值?不可能,除非它返回集合。 "docs.oracle.com/cd/B28359_01/appdev.111/b28370/…" - "避免在函数中使用 OUT 和 IN OUT。函数的目的是接受零个或多个参数并返回单个值。函数必须没有副作用,这会更改子程序非本地变量的值。” 【参考方案1】:

函数返回一个值。

在 where 子句中,您需要将该返回值与某些内容进行比较,例如

SELECT * 
FROM employees emp 
WHERE emp.loc = 'US' 
AND usr.fnctn('emp_sal', :sal1, :sal2) = 42;

【讨论】:

以上是关于Oracle SQL where 子句中的函数的主要内容,如果未能解决你的问题,请参考以下文章

在oracle中where 子句和having子句中的区别

oracle 形式:pl/sql 中 where 子句中的 max 子句

变量作为 Oracle PL/SQL 中 where 子句中的列名

在 Oracle SQL 中,除了外连接之外,where 子句中的 (+) 运算符的目的是啥?

如何强制 where 子句中的函数在 oracle 中执行一次?

SSIS 数据流,忽略 SQL 语句中的 where 子句