【问题标题】:Oracle package doesn't recognise all variablesOracle 包无法识别所有变量
【发布时间】:2015-04-03 01:23:48
【问题描述】:

我在家里的笔记本电脑上为一个大学项目设置了一个 Oracle express 数据库。我已经在 sql 脚本中导出了数据库,并尝试在我的工作场所导入它,除了包之外一切正常。包已创建,但 Oracle 似乎无法识别所有声明的变量,他只识别第一个变量(见下面的代码),在我的情况下是 SIFRADOB NUMBER:=0; 我的触发器显示错误,因为他们看不到变量在包中声明。我已经删除了包并再次创建它,但仍然遇到同样的问题。我什至删除了数据库,但问题又出现了。这是问题的图像http://s17.postimg.org/67izq4wcf/package_error.png

    create or replace PACKAGE "PAKET" AS
    SIFRADOB NUMBER:=0;
    NAZIVDOB VARCHAR2(50);
    STARASIFRA NUMBER:=0;
    STARINAZIV VARCHAR2(50);
    SIFRAJM NUMBER:=0;
    NAZIVJM VARCHAR2(80);
    SIFRAPRO NUMBER:=0;
    BROJPOR NUMBER:=0;
    END;

【问题讨论】:

  • 你能显示触发器吗?触发器和包是 2 个独立的对象,它们通常不能“看到”彼此。现在,您在 pkg 中声明这些变量的方式,您应该能够通过“paket.sifradob”等在外部引用它们......所以这可能只是一个特权问题。我很困惑,你说第一个没问题。你能展示你得到的结果吗?错误等?我无法从工作中查看该图像,因此您必须找到另一种方法来链接到它。 (我以为可以在这里将图片加载到他们的帖子中,不是吗?)
  • SQL Developer 在我看来与包含多个变量的包规范(版本 4.1.0)完全相同。它根本不影响引用其他变量的能力。您的触发器错误可能与 SQL Developer 的外观完全无关;你真的需要包括你的表 DDL、触发代码和你在问题中得到的错误。
  • Afaik oracle 标识符在包含在双引号中时会区分大小写 - 您是否在触发器中将包称为 PAKET(大写)?
  • 是的,我确实在触发器中使用大写字母。
  • @collapsar,在 Oracle 中 "PAKET"PAKETpaket 相同。

标签: oracle oracle11g package


【解决方案1】:

您的代码已编译并且所有变量都存在,所以不是这样,它可能只是 SQL Developer 或您对对象的权限不正确。
通过执行以下命令验证您编译的代码是否已加载:
select text from user_source where name='PAKET';
如果您看到其中列出的所有变量,则说明它已正确加载。

【讨论】:

  • 是的,这确实列出了我在包中声明的所有变量。
  • 然后他们都在那里。我喜欢下面关于可能的非拉丁字符的答案。
【解决方案2】:

我不认为这个问题存在于某种奇怪的“认识”中。据我了解,包编译没有错误,可以重新编译,所以它的内容应该是可用的。

首先,我会检查您是否使用了一些非拉丁字符。标识符,例如,PACKET 和 РАСКЕТ 是完全不同的,尽管看起来相同。它可以解释为什么您描述了 РАСКЕТ.XYZ 但无法引用 PACKET.XYZ。

一般来说,一旦你删除了数据库,你就可以从空模式开始。所以请这样做并使用您的包脚本执行,例如

create table T (...);

create package P
  x number;
  y number;
  z number;
end;
/

create trigger t_bi before insert on t
begin
  P.y := 1;
end;

show errors;
/

我怀疑它是否会导致一些错误,但如果是,请发布这些操作的日志。

【讨论】:

    【解决方案3】:

    在解决了所有发布的答案后,都没有解决问题。我最终去了触发器,只是“重命名”了,也就是说在我的变量中重新输入了单词“PAKET”,编译了触发器并且它起作用了!如果我们考虑到我基本上没有改变任何东西,那真的很尴尬。有时甲骨文以神秘的方式工作。 :)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-02-27
      • 2013-05-15
      • 2019-06-06
      • 2014-06-10
      • 2017-01-04
      相关资源
      最近更新 更多