Oracle
用户:不是dba
在我的oracle数据库中,我能够执行以下操作:
SELECT * FROM ALL_SYNONYMS但是,当我在pl/sql中执行它时,它能够编译和执行,但是dbms.putline没有输出任何内容:
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用户任何角色?
发布于 2016-04-21 14:01:16
您不需要任何特殊权限来查看ALL_*视图。
如果该过程由USER1拥有并以USER1的身份运行,则可能没有授予USER1对任何同义词的访问权限。
如果该过程属于USER1以外的其他用户,则可能是该用户没有被授予访问任何同义词的权限。
这都取决于谁的凭据实际上被用来运行这个过程--您的、USER1、过程所有者--以及用户拥有的同义词或授予同义词什么。
发布于 2016-04-21 14:57:16
不需要拨款。您不会看到任何结果,因为默认情况下输出是禁用的。在运行代码之前启用输出:
set serveroutput on发布于 2016-04-21 15:18:08
DBA是否禁用DBMS输出?
尝试在SQL*Plus中运行这个
SET SERVEROUTPUT ON SIZE 30000;
EXEC PROCEDURE_1('SYN_NAME'); --replace with name of synonym you want to find您还可以添加
DBMS_OUTPUT.ENABLE (buffer_size => NULL);对你的手术来说
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;
/https://dba.stackexchange.com/questions/136084
复制相似问题