我在家用笔记本电脑上为一个大学项目设置了一个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;
答案 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以神秘的方式工作。 :)