Oracle 10g 提供的软件包不可用

Posted

技术标签:

【中文标题】Oracle 10g 提供的软件包不可用【英文标题】:Oracle 10g Supplied Packages Unavailable 【发布时间】:2011-04-20 17:08:07 【问题描述】:

我是一名学习 PL/SQL 的学生。我有一个 10g 的本地安装,我正在运行我的查询。每当我尝试使用 DBMS_ALERT、DBMS_PIPE 或其他默认包时,都会收到“invalid SQL”消息。我已经尝试过 TOAD 和 SQL+Plus 中的查询,结果相同。这会让我相信这些软件包没有安装,或者我的用户会话无法访问。我正在使用“SYS”用户登录,所以我认为权限不会是问题。

有人可以教我如何使这些软件包可用吗?我的印象是它们是默认提供的?

非常感谢,

凯尔

【问题讨论】:

请告诉我们您正在运行的 SQL 【参考方案1】:

您可能做错的一件事是尝试在 PL/SQL 块之外调用 PL/SQL 函数或过程。您可能需要将过程调用封装在beginend 中,例如:

SQL> dbms_lock.sleep(1); SP2-0734:以“dbms_lock....”开头的未知命令 - 忽略行的其余部分。 SQL> 开始 dbms_lock.sleep(1);结尾; 2 / PL/SQL 过程成功完成。

(一行中的单个/ 本身告诉SQL*Plus 那是输入的结束。通常,SQL*Plus 使用分号来标记语句的结束。但是,PL/SQL 可以包含分号,并且如果 SQL*Plus 识别出您正在输入 PL/SQL,它会在将其输入传递给数据库之前自行等待单个 /。)

您看到的错误的另一个可能原因是您试图在查询中调用存储过程。这是不可能的,因为存储过程不返回任何结果。诚然,如果您尝试在查询中调用过程时得到的错误并不是特别有用:

SQL> select dbms_alert.register('test') from dual; 从 dual 中选择 dbms_alert.register('test') * 第 1 行的错误: ORA-00904: "DBMS_ALERT"."REGISTER": 标识符无效

这个错误的原因很可能是 Oracle 没有费心在存储过程中查找名称 dbms_alert.register,而是给出了一个通用的“我找不到这个名称”错误。

如果您的问题不是我所描述的任何一个,请告诉我。

【讨论】:

【参考方案2】:

这些软件包可能根本没有安装。如果您想安装它们,请查看 $ORACLE_HOME/rdbms/admin 目录并以 SYS 身份运行脚本。我包含了您上面列出的软件包的文件参考。

DBMS_ALERT dbmsalrt.sql 和 prvtalrt.plb

DBMS_PIPE dbmspipe.sql 和 prvtpipe.plb

【讨论】:

以上是关于Oracle 10g 提供的软件包不可用的主要内容,如果未能解决你的问题,请参考以下文章

静默方式安装10g数据库软件+升级patch+手工建库

安装oracle10g 和oralce11g之后,plsql连接正常。有一个软件需要连接oracle,提示报错ORA-01804: 时区信息

oracle 10g rac环境升级到10.2.0.5

centos 6.0下安装oracle 10g出现的问题

Oracle10G数据库中软硬件环境都有哪些要求

Oracle Database 12c DBA文官手册(第8版)——第12章 实时应用群集