当我尝试创建一个名为 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
答案 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中找到它。
干杯!