gpt4 book ai didi

sql - Oracle中的LEFT函数

转载 作者:行者123 更新时间:2023-12-04 16:26:17 26 4
gpt4 key购买 nike

我正在寻找一个Oracle(10g)存储过程,并遇到了以下LEFT/RIGHT函数。

TO_DATE(LEFT('01-Jun-1201',9))

在Toad编辑器中,我无法运行此功能,而必须将其更改为 LPAD
TO_DATE(LPAD('01-Jun-1201',9))

存储过程可以使用 LEFT/ RIGHT函数正常运行,但是如果我使用 LPAD/ RPAD,则存储过程可以运行得更快。

Oracle中是否有任何 LEFT函数,如果没有,为什么存储过程运行良好?

SELECT
SUM(DECODE(SIGN(TO_DATE(LEFT('01-Jun-12', 9)) - TO_DATE(logdate)),
-1, totaltime, 0, totaltime, 0)) AS totaltime
FROM AREA2.v_area
WHERE logdate >= TO_DATE(RIGHT('01-Jun-12', 9))
AND logdate <= TO_DATE('30-Jun-12')

最佳答案

Oracle中没有记录的LEFT()函数。 Find the full set here

您可能拥有的是用户定义的功能。您可以通过查询数据字典轻松地进行检查:

select * from all_objects
where object_name = 'LEFT'

但是存在一个问题,为什么存储过程可以工作而查询却不能工作。一种可能的解决方案是该存储过程由另一个模式拥有,该模式也拥有LEFT()函数。他们已授予该过程的权限,但未授予其依赖项。之所以可行,是因为默认情况下,存储过程以DEFINER特权运行,因此您可以像存储所有者一样运行存储过程。

如果是这样,那么上面列出的数据字典查询将无济于事:它只会返回您有权使用的对象的行。在这种情况下,您将需要以存储过程的所有者身份运行查询,或者以具有查询DBA_OBJECTS权限的用户身份连接。

关于sql - Oracle中的LEFT函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11309247/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com