无法执行SP且错误为PLS-00201

时间:2013-12-15 06:06:11

标签: oracle plsql oracle11g

我存储了名为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 C​​AL_TAX的一部分。

CREATE OR REPLACE PROCEDURE CAL_TAX
AUTHID CURRENT_USER
IS
.
.
.

1 个答案:

答案 0 :(得分: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块应该有效。