首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Oracle:无法从PL/SQL中的All_Synonyms中获得值

Oracle:无法从PL/SQL中的All_Synonyms中获得值
EN

Database Administration用户
提问于 2016-04-21 13:13:58
回答 3查看 523关注 0票数 0

Oracle

用户:不是dba

在我的oracle数据库中,我能够执行以下操作:

代码语言:javascript
复制
SELECT * FROM ALL_SYNONYMS

但是,当我在pl/sql中执行它时,它能够编译和执行,但是dbms.putline没有输出任何内容:

代码语言:javascript
复制
CREATE PROCEDURE PROCEDURE_1 AS
  strName VARCHAR2(50);
  CURSOR C_NAME IS SELECT SYNONYM_NAME FROM ALL_SYNONYMS WHERE TABLE_OWNER = 'USER1';

BEGIN

   FOR R_NAME in C_NAME
   LOOP
     strName := R_NAME.SYNONYM_NAME;
     dbms_output.put_line(strName);        <-----
   END LOOP;


END PROCEDURE_1 

我们是否需要为All_Synonyms表授予非dba用户任何角色?

EN

回答 3

Database Administration用户

发布于 2016-04-21 14:01:16

您不需要任何特殊权限来查看ALL_*视图。

如果该过程由USER1拥有并以USER1的身份运行,则可能没有授予USER1对任何同义词的访问权限。

如果该过程属于USER1以外的其他用户,则可能是该用户没有被授予访问任何同义词的权限。

这都取决于谁的凭据实际上被用来运行这个过程--您的、USER1、过程所有者--以及用户拥有的同义词或授予同义词什么。

票数 1
EN

Database Administration用户

发布于 2016-04-21 14:57:16

不需要拨款。您不会看到任何结果,因为默认情况下输出是禁用的。在运行代码之前启用输出:

代码语言:javascript
复制
set serveroutput on
票数 0
EN

Database Administration用户

发布于 2016-04-21 15:18:08

DBA是否禁用DBMS输出?

尝试在SQL*Plus中运行这个

代码语言:javascript
复制
SET SERVEROUTPUT ON SIZE 30000;

EXEC PROCEDURE_1('SYN_NAME'); --replace with name of synonym you want to find

您还可以添加

代码语言:javascript
复制
DBMS_OUTPUT.ENABLE (buffer_size => NULL);

对你的手术来说

代码语言:javascript
复制
CREATE PROCEDURE PROCEDURE_1 AS
  strName VARCHAR2(50);
  CURSOR C_NAME IS SELECT SYNONYM_NAME FROM ALL_SYNONYMS WHERE TABLE_OWNER = 'USER1';

BEGIN
   DBMS_OUTPUT.ENABLE (buffer_size => NULL);  -- add this NOT RECOMMENDED
   FOR R_NAME in C_NAME
   LOOP
     strName := R_NAME.SYNONYM_NAME;
     dbms_output.put_line(strName);
   END LOOP;

END PROCEDURE_1;
/
票数 0
EN
页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://dba.stackexchange.com/questions/136084

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档