如何在 Oracle 的 where 子句中使用用户定义的函数?

Posted

技术标签:

【中文标题】如何在 Oracle 的 where 子句中使用用户定义的函数?【英文标题】:How to use a user defined function in where clause in Oracle? 【发布时间】:2020-11-09 14:57:40 【问题描述】:

我想做这样的事情:

SELECT subscription from TENANT where tenant_id = (select GET_TENANTID(12345) as tenant_id from DUAL);

这里,GET_TENANTID 是一个用户定义的函数。 另外,tenant_id 字段是varchar2 类型的列。

我使用的是 Oracle 12c。

【问题讨论】:

【参考方案1】:

您的代码应该可以工作,但为什么不这样做:

select subscription
from TENANT
where tenant_id = GET_TENANTID(12345);

假设类型相同。如果不相同,则将数字转换为字符串。

【讨论】:

它没有。它给出: ORA-01722:无效号码 01722。00000 - “无效号码” *原因:指定的号码无效。 *行动:指定一个有效的数字。会不会是因为tenant_id 是 varchar 有时 GET_TENANTID 返回 null ? 没有。但这可能是因为get_tenantid() 返回了一个数字。 谢谢。我将其更改为 TO_CHAR(GET_TENANTID(12345)) 并且有效。 “我将其更改为 TO_CHAR(GET_TENANTID(12345)) 并且它有效”。那么 SUBSCRIPTION.TENANT_ID 的数据类型是什么?听起来 to_char() 是一种创可贴,真正的解决方案是修复您的函数以返回正确的匹配数据类型。

以上是关于如何在 Oracle 的 where 子句中使用用户定义的函数?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Oracle 的 where 子句中使用用户定义的函数?

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

如何在where子句中使用max优化Oracle中的查询

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

oracle用WHERE替代ORDER BY

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