Oracle包无法识别所有变量

时间:2015-02-03 18:11:33

标签: oracle oracle11g package

我在家用笔记本电脑上为一个大学项目设置了一个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;

3 个答案:

答案 0 :(得分:1)

我不认为这个问题存在于一些奇怪的“认可”中。据我所知,软件包编译时没有错误,可以重新编译,因此内容应该可用。

首先,我会检查你是否使用了一些非拉丁字符。标识符,例如,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;
/

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

答案 1 :(得分:0)

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

答案 2 :(得分:0)

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