【问题标题】:How to use a user defined function in where clause in Oracle?如何在 Oracle 的 where 子句中使用用户定义的函数?
【发布时间】: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。

【问题讨论】:

    标签: sql database oracle user-defined-functions oracle12c


    【解决方案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() 是一种创可贴,真正的解决方案是修复您的函数以返回正确的匹配数据类型。
    猜你喜欢
    • 1970-01-01
    • 2016-12-29
    • 1970-01-01
    • 1970-01-01
    • 2021-08-16
    • 2012-09-03
    • 2022-09-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多