如何在Oracle 18c中通过用户定义的过程访问HR模式对象?

时间:2019-12-04 08:30:46

标签: oracle plsql procedure

当我尝试创建一个名为 user1 的过程时,我给出了代码和错误消息。我尝试在Oracle XE 18c的示例hr模式中访问employee表。我可以知道如何通过用户定义的过程访问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 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

2 个答案:

答案 0 :(得分:0)

您将需要向用户user1授予对HR对象的访问权限。

以用户HR身份连接:

grant select on employees to user1;

答案 1 :(得分:0)

您需要直接 提供select grant表中的hr.employees

从HR用户处,您需要执行:

grant select on employees to user1;

通过定义者权限执行hr.employees程序(PL/SQL)时,将不考虑通过角色授予用户的procedure/function/etc..授予< / strong>。

  

子程序中角色的使用取决于它是否与   定义者权利或调用者权利。在定义者权利子程序中,   所有角色都被禁用。

在Oracle文档here中找到它。

干杯!