如何以非管理员身份运行 dbms_output 的功能?

Posted

技术标签:

【中文标题】如何以非管理员身份运行 dbms_output 的功能?【英文标题】:How can I run functions of dbms_output as non-admin? 【发布时间】: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”的模式。 【参考方案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。

以上是关于如何以非管理员身份运行 dbms_output 的功能?的主要内容,如果未能解决你的问题,请参考以下文章

windows 10中Microsoft Edge Beta登录账户提示:以管理员身份运行 Microsoft Edge 时不支持登录。请以非管理员身份重新启动 Microsoft Edge,然后重新

Ubuntu 以非管理员用户身份执行 .jar

如何在 Debian 上以非 root 用户身份运行 Spring Boot 应用程序?

如何在官方 docker php 映像上以非 root 用户身份运行 composer

如何以非 root 用户身份使用 CPAN?

如何在 docker 中以非 root 用户身份写入卷容器?