【发布时间】: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"与PAKET和paket相同。