当前位置: 首页 > 知识库问答 >
问题:

函数名在SQL中超出范围

翟元凯
2023-03-14

我试图创建一个抽象层来模拟Oracle 11g中的DB2函数。目标是让当前运行DB2查询的客户重新指向Oracle抽象层,而无需更改其语法。

我在ABC模式下创建了以下函数:

create or replace function ABC.timestamp(p_date in date) return date is
begin
  return p_date;
end;

当我试图在SQL语句中使用它时,会出现一个错误:

select timestamp(current_date) from dual;

ORS-06553: PLS-222: no function with name 'TIMESTAMP' exists in this scope

如果我显式地调用模式,它会工作:

select ABC.timestamp(current_date) from dual;

我还有一个登录触发器,可以显式地将会话的当前_模式设置为ABC。我能看到的唯一复杂之处是,时间戳在Oracle中是一个关键字,但它允许我用这个名称创建这个函数。

有什么办法能让它发挥作用吗?

共有1个答案

凌鹏程
2023-03-14

我认为你不能“按原样”解决这个问题。但是,如果在函数名周围使用双引号(这是一些人做的另一件蠢事——看看我,我现在就这么做),它将在没有所有者名称的情况下工作:

SQL> create or replace function "timestamp" (p_date in date) return date is
  2  begin
  3    return p_date;
  4  end;
  5  /

Function created.

SQL> select "timestamp"(current_Date) from dual;

"TIMESTA
--------
11.01.18

SQL>

然而,这意味着您在引用该函数时必须始终使用双引号。

如果我是你,我会改变函数名。正如你所见,你能做某事并不意味着你应该做。

 类似资料:
  • 问题内容: 我有一列设置为尝试插入诸如的数字时,它表示超出范围。为什么? 问题答案: 在 MySQL中,An 存储在4个字节上,因此只能包含和之间的值。 大于; 因此它不适合-看起来您将不得不使用 。 有关此信息,请参见MySQL手册的“ 数据类型- 数值类型” 部分 。

  • 我在设置鹰派代理时遇到问题。我已经在 OpenShift 容器中设置了代理,当代理尝试调用在另一个容器中运行的另一个应用程序的 jolokia endpoint时,我收到此错误日志: 也许有人有类似的问题?代理的版本是Hawkular OpenShift Agent:版本:0.1.0。

  • 我从一个API调用中获得一个日期值为1598331600000 我正在尝试使用SimpleDateFormat将其转换为可读格式

  • 我使用带有AnyLogic的外部数据库来检查数据库中是否存在数据。如果没有,那么我需要插入并执行另一个操作。然而,我得到了这个错误 jdbc。SQLServerException:索引1超出范围。 这是我的代码。 下面是完整的错误消息

  • 我正在移动一个ASP经典应用程序到一个新的服务器。我没有开发的应用程序和我没有经验与ASP希望有人能指导我。 我读到可能是日期格式,所以我把它改成YYYY-MM-DD。 现在它正显示出这一点: 数据库上的日期格式如下所示: 这是asp文件的代码:

  • 问题内容: 我已经开始处理我的第一个Java程序,它是一个简单的计算器,但是我得到一个错误,声称我的数组超出范围。我尝试对其进行调试,以了解这样做的原因和原因,并遵循纸上的代码,两者均显示了我期望和期望的结果。因此,我看不到问题出在哪里。代码不完整。 根据调试器,此行出现错误: 这是我当前拥有的代码的主要部分: 这是我收到的错误消息: 问题答案: 当等于中的最后一个元素索引时,则将大于最后一个元素