简体   繁体   English

无法执行SP,错误PLS-00201

[英]Failed to execute SP with error PLS-00201

I've stored procedure called CAL_TAX which create by schema EMP_DBA, right now I want to grant execute right on this SP to user USER1. 我已经存储了一个称为CAL_TAX的存储过程,该存储过程由架构EMP_DBA创建,现在我想将此SP上的执行权限授予用户USER1。 I've execute below statement: 我执行以下语句:

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;

When I connect as USER1 and execute SP CAL_TAX, I received below error messages. 当我以USER1身份连接并执行SP CAL_TAX时,收到以下错误消息。 Can anyone help me on this ? 谁可以帮我这个事 ? I've no problem to execute SP if connect as EMP_DBA 如果以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

This is the part of the SP CAL_TAX. 这是SP C​​AL_TAX的一部分。

CREATE OR REPLACE PROCEDURE CAL_TAX
AUTHID CURRENT_USER
IS
.
.
.

You need to either specify the owner of the SP: 您需要指定SP的所有者:

BEGIN emp_dba.cal_tax; END;

or, you can create a public synonym: 或者,您可以创建一个公共同义词:

CREATE PUBLIC SYNONYM cal_tax FOR emp_dba.cal_tax;

or you can create a private synonym for each user: 或者,您可以为每个用户创建一个私人同义词:

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

Once the synonym is created, your original BEGIN..END block should work. 创建同义词后,您原来的BEGIN..END块应该可以使用。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM