如何修复此“忽略 SQL 语句”错误?

Posted

技术标签:

【中文标题】如何修复此“忽略 SQL 语句”错误?【英文标题】:How can I fix this "SQL Statement ignored" error? 【发布时间】:2010-06-24 19:20:13 【问题描述】:

我有以下无法编译的小函数:

function f_query_01  Return interval Day to second is 
  start_time timestamp(3);
  end_time timestamp(3);
  time_diff interval Day to second;  
  c_query_number number;

begin

  start_time := systimestamp; 
  select count(*) into c_query_number from wg;  <--This is the line that errors out
  end_time := systimestamp;
  time_diff := start_time - end_time;

  return time_diff;

end f_query_01;

编译器给我以下错误:

Error(29,3): PL/SQL: SQL Statement ignored
Error(29,44): PL/SQL: ORA-04044: procedure, function, package, or type is not allowed here

是什么导致了这个错误,我该如何解决?

【问题讨论】:

select count(*) into c_query_number from wg; 在与函数相同的数据库/模式中运行时,是否在函数之外工作? 有趣。它尝试了这段代码,将 wg 替换为另一个小表。编译运行成功。你确定这正是有问题的代码吗? 问题是wg表不存在。一旦我将表重命名为正确的名称,一切都很好。在这种情况下,我真的觉得错误消息非常具有误导性,这种情况确实发生了,但仍然令人沮丧。 “语句被忽略”消息意味着编译器尝试编译其余部分,就好像提到的语句不存在一样,因此可能会发生更多错误,例如当该行开始循环时。 [2015-07-12 16:38:48] [65000][6550] ORA-06550:第 2 行,第 3 列:PLS-00905:对象 MARTIN.WS11_A5_LOOPER 无效 ORA-06550:第 2 行第 3 列:PL/SQL:语句被忽略 【参考方案1】:

似乎 wg 表不存在。当更新为正确的表名时,编译工作不会出错。来自 table 的编译器的消息不存在将是最有帮助的。

【讨论】:

我认为错误信息背后的原因是,如果对象不在数据字典中,那么它必须是本地定义的对象,因此是“过程、函数、包或类型”,即都是可以用函数定义的东西。 编译代码时,出现“表不存在”错误。当我有一个名为 wg 的函数时编译它时,我得到了描述的错误。也许某个地方有另一个“wg”的公共同义词。【参考方案2】:
CREATE OR REPLACE FUNCTION f_query_01
   RETURN NUMBER
IS
BEGIN
   DECLARE
      c_query_number   NUMBER DEFAULT NULL;
      start_time       DATE DEFAULT NULL;
      end_time         DATE DEFAULT NULL;
      time_diff        NUMBER DEFAULT NULL;
   BEGIN
      SELECT CAST (SYSTIMESTAMP AS DATE) INTO start_time FROM DUAL;

      SELECT COUNT (*) INTO c_query_number FROM ws;

      SELECT CAST (SYSTIMESTAMP AS DATE) INTO end_time FROM DUAL;

      time_diff := start_time - end_time;

      RETURN time_diff;
   END;
END f_query_01;

【讨论】:

以上是关于如何修复此“忽略 SQL 语句”错误?的主要内容,如果未能解决你的问题,请参考以下文章

如何修复此类型错误?

出现此错误时如何修复gradle?

如何获得修复此错误的 Stacktrace?

如何修复此 MYSQL//Phpmyadmin 错误? [复制]

如何使用嵌入 webhook 的 discord.py 修复此错误

如何在我的查询中修复此语法错误?