【问题标题】:How can I run functions of dbms_output as non-admin?如何以非管理员身份运行 dbms_output 的功能?
【发布时间】:2021-09-12 14:06:18
【问题描述】:

我的计算机上有 XE,使用的是 Oracle Database 18c。早些时候,即使我以系统管理员或默认角色登录,我也能够执行函数dbms_output.put_line();。现在,我只能在以 sysadmin/sysdba 身份登录时运行dbms_output.put_line()。作为默认用户,我收到以下消息:

PLS-00201: identifier ‘DBMS_OUPUT.PUT_LINE’ must be declared

我尝试添加权限以使用命令执行dbms_output grant execute on DBMS_OUTPUT to username;,但是,当我执行包含dbms_output.put_line() 的命令时收到此消息:

ORA-04067: not executed, package body "PERFSTAT.DBMS_OUTPUT" does not exist
ORA-06508: PL/SQL: could not find program unit being called: "PERFSTAT.DBMS_OUTPUT"

使用 sqlplus,我作为默认用户收到以下错误:

PLS-00201: identifier 'DBMS_OUTPUT.ENABLE' must be declared

我该如何解决这个问题?

【问题讨论】:

  • 您是否在尝试解决您的问题时创建了同义词 - 最初似乎只是一个错字?什么是“默认用户”?
  • @AlexPoole,“默认用户”的意思是“非管理员用户”。可能是因为我正在阅读 Tom Kyte 写的书,其中有一部分是我们 - 设置 Statspack - 创建一个名为“Perfstat”的模式。

标签: oracle dbms-output


【解决方案1】:

那可能是因为你把它命名错了:

No : DBMS_OUPUT.PUT_LINE      (not "ouput" but "output")
Yes: DBMS_OUTPUT.PUT_LINE

截至第二条消息;好吧,这个:PERFSTAT.DBMS_OUTPUT 没有意义,PERFSTAT 不拥有该软件包。它被称为

begin
  dbms_output.put_line('Hello');
end;
/

适用于任何用户,无需特殊授权。

【讨论】:

  • 我编写了您在此处添加的代码,但我仍然收到perfstat-错误。 ://
  • 你愿意吗?如果我在发布的代码中从未提到过 PERFSTAT,那怎么办?
  • 您可以尝试拨打sys.dbms_output.put_line('Hello');。如果这样可行,也许您为 dbms_output 创建了一个损坏的同义词 perfstat.dbms_output。
猜你喜欢
  • 1970-01-01
  • 2015-01-04
  • 1970-01-01
  • 2016-01-25
  • 1970-01-01
  • 1970-01-01
  • 2012-11-22
  • 2016-09-20
  • 2010-11-26
相关资源
最近更新 更多