如何在Oracle 18c中通过用户定义的过程访问HR架构对象?
我已经给出了当我尝试创建一个user1过程时得到的代码和错误消息。我尝试访问Oracle XE 18c中示例hr模式中的employees表。我可以知道如何通过用户定义的过程访问hr架构对象吗如何在Oracle 18c中通过用户定义的过程访问HR架构对象?,oracle,plsql,procedure,Oracle,Plsql,Procedure,我已经给出了当我尝试创建一个user1过程时得到的代码和错误消息。我尝试访问Oracle XE 18c中示例hr模式中的employees表。我可以知道如何通过用户定义的过程访问hr架构对象吗 CREATE OR REPLACE PROCEDURE proc_1 IS v_name hr.employees.first_name%TYPE; v_num NUMBER; BEGIN SELECT first_name INTO v_name FROM hr.employees WHERE empl
CREATE OR REPLACE PROCEDURE proc_1 IS
v_name hr.employees.first_name%TYPE;
v_num NUMBER;
BEGIN
SELECT first_name INTO v_name FROM hr.employees
WHERE employee_id=100;
v_num:=5;
DBMS_OUTPUT.PUT_LINE('test'||v_name);
DBMS_OUTPUT.PUT_LINE(v_num);
END;
/
警告:创建的过程存在编译错误
SQL> show errors
Errors for PROCEDURE PROC_1:
LINE/COL ERROR
-------- -----------------------------------------------------------------
2/8 PL/SQL: Item ignored
2/8 PLS-00201: identifier 'HR.EMPLOYEES' must be declared
5/1 PL/SQL: SQL Statement ignored
5/39 PL/SQL: ORA-00942: table or view does not exist
7/1 PL/SQL: Statement ignored
7/38 PLS-00320: the declaration of the type of this expression is
incomplete or malformed
您需要将对HR对象的访问权限授予用户user1 作为用户HR连接:
grant select on employees to user1;
您需要直接为
hr.employees
表提供select grant
从HR用户,您需要执行:
grant select on employees to user1;
当PL/SQL
程序(procedure/function/etc..
)在定义人的权限下执行时,将不考虑通过角色授予您的用户人力资源员工
子程序中角色的使用取决于它是否以
定义者权限或调用者权限。在定义者权限子程序中,
所有角色都被禁用
可以在Oracle文档中找到它
干杯 我已将select授予一个角色,并将该角色分配给user1user1。Ser1可以直接访问hr架构对象,如下所示。但无法通过用户从hr.employees创建的SQL>SELECT COUNT()过程访问;COUNT()------------107为了能够从存储过程而不是通过角色访问表,您需要直接授权。