【问题标题】:Unable to see error description in SQL plus在 SQL plus 中看不到错误描述
【发布时间】:2019-01-09 18:16:24
【问题描述】:

我是 oracle 新手,使用 SQL plus 终端访问 oracle DB。我尝试创建一个函数,但它返回警告

function created with compilation error

当我执行 show errors 时,它总是显示

错误:

ORA-00942: table or view does not exist

我的功能:

create or replace function axsaum.get_name
AS
v_name varchar2(20);
begin
v_name:='Helloooooo';
dbms_output.put_line(v_name);
END;
/

请提出建议。

【问题讨论】:

标签: oracle stored-procedures sqlplus


【解决方案1】:

您收到错误消息:ORA-00942: table or view does not exist。这意味着您的函数包含对数据库对象的引用,编译器无法将其关联到在函数范围内的表或视图。

你可能会得到这个有几个原因。

  1. 您的函数引用了架构中存在的表或视图,但您拼错了它的名称。
  2. 您的函数引用了存在于不同架构中的表或视图,并且您没有在引用前加上所属架构的前缀,也没有同义词。
  3. 您的函数引用了存在于不同架构中的表或视图,但架构所有者未授予您对该对象的权限。
  4. 您的函数引用了存在于不同架构中的表或视图,并且架构所有者已通过角色授予您对该对象的权限。 Oracle 安全模型意味着我们不能使用通过角色授予我们帐户的权限来构建数据库对象(视图、存储过程等)。权限必须明确授予我们的指定帐户。
  5. 您的架构或其他架构中不存在该对象。

前两个原因是您可以自行解决的。其他人需要模式所有者或具有管理员权限的高级用户(例如 DBA)的干预。


现在您已经发布了函数,我们可以看到您正在引用 Oracle 内置包 DBMS_OUTPUT。现在该软件包应该作为默认安装的一部分进行安装和授予。但是,如果您有非标准安装或意外删除或撤销了某些内容,则需要让 SYS 用户运行应该修复它的 dbmsotpt.sql 脚本。详细信息包含在包的文档中。 Find out more.

【讨论】:

  • 尽管我在函数中指定了正确的模式名称并提供了正确的权限,但我也遇到了同样的错误。我尝试创建一个函数也另一个触发器,两者都抛出相同的错误,是否需要像 catproc.sql 一样执行任何 .sql 默认文件???
  • 请检查我的函数,它没有任何表格。那为什么它在执行显示错误查询时抛出该表不存在错误?
  • Oracle 经常在新的上下文中使用旧消息;看起来就是这里的情况。
  • 我也无法使用 user_errors 和 dba_errors 表并低于 error.SQL> select * from user_errors; select * from user_errors * ERROR at line 1: ORA-00942: table or view does not exist
  • 好的,听起来您的数据库安装不正确。以防万一,是的,您应该运行catproc.sql。抱歉花了这么长时间才到达这里,但您最初的问题缺少这些关键细节。教导是,你的问题越完整,你就越有可能得到有用和及时的答复。
猜你喜欢
  • 2011-01-10
  • 2015-12-10
  • 2022-01-14
  • 2013-01-10
  • 2020-07-30
  • 1970-01-01
  • 2017-08-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多