【问题标题】:Failed to execute SP with error PLS-00201执行 SP 失败,错误 PLS-00201
【发布时间】:2013-12-15 14:22:46
【问题描述】:

我有一个名为 CAL_TAX 的存储过程,它由 EMP_DBA 模式创建,现在我想将此 SP 上的执行权限授予用户 USER1。我已经执行了以下语句:

CREATE USER USER1 IDENTIFIED BY USER1234;
GRANT CONNECT TO USER1;
GRANT RESOURCE TO USER1;
GRANT CREATE SESSION TO USER1;
GRANT EXECUTE ON EMP_DBA.CAL_TAX TO USER1;

DECLARE
CURSOR C1 IS SELECT TABLE_NAME FROM USER_TABLES;
CMD VARCHAR2(200);
BEGIN
FOR C IN C1 LOOP
CMD:='GRANT SELECT ON ' || C.TABLE_NAME || ' TO USER1';
EXECUTE IMMEDIATE CMD;
END LOOP;
END;

当我以 USER1 身份连接并执行 SP CAL_TAX 时,我收到以下错误消息。谁可以帮我这个事 ?如果以 EMP_DBA 身份连接,我执行 SP 没有问题

BEGIN CAL_TAX; END;

         *
ERROR AT LINE 1:
ORA-06550: LINE 1, COLUMN 7:
PLS-00201: IDENTIFIER 'CAL_TAX' MUST BE DECLARED
ORA-06550:LINE 1, COLUMN 7:
PL/SQL: STATEMENT IGNORED

这是 SP CAL_TAX 的一部分。

CREATE OR REPLACE PROCEDURE CAL_TAX
AUTHID CURRENT_USER
IS
.
.
.

【问题讨论】:

    标签: oracle plsql oracle11g


    【解决方案1】:

    您需要指定 SP 的所有者:

    BEGIN emp_dba.cal_tax; END;
    

    或者,您可以创建一个公共同义词:

    CREATE PUBLIC SYNONYM cal_tax FOR emp_dba.cal_tax;
    

    或者您可以为每个用户创建一个私有同义词:

    CONNECT user1/pw
    CREATE SYNONYM cal_tax FOR emp_dba.cal_tax;
    

    创建同义词后,您的原始 BEGIN..END 块应该可以工作。

    【讨论】:

    • 开始加税;结尾; * 第 1 行出现错误:ORA-00942:表或视图不存在 ORA-06512:在“EMP_DBA.CAL_TAX”,第 111 行 ORA-06512:在第 1 行
    • 一旦在 SP 中指定了 EMP_DBA 模式,我就可以使用 USER1 运行 SP
    • 需要查看您的 SP 的来源才能确定,但​​似乎您正在引用一个您没有适当权限的表。您可能会更新第 111 行的表格吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-25
    相关资源
    最近更新 更多