如何在 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 子句中使用用户定义的函数?的主要内容,如果未能解决你的问题,请参考以下文章