Oracle 无法执行SP,错误为PLS-00201

Oracle 无法执行SP,错误为PLS-00201,oracle,plsql,oracle11g,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

我有一个名为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_税的一部分

CREATE OR REPLACE PROCEDURE CAL_TAX
AUTHID CURRENT_USER
IS
.
.
.

您需要指定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块应该可以使用。

BEGIN CALU TAX;完;*第1行错误:ORA-00942:表或视图不存在ORA-06512:在“EMP_DBA.CAL_TAX”第111行ORA-06512:在第1I行中,我可以使用USER1运行SP。在SPU中指定EMP_DBA模式后,我需要查看源以确保SP知道,但似乎您正在引用一个没有相应权限的表。您可能正在更新第111行的表吗?