2017-05-16 3 views
0

패키지의 동의어를 만들었지 만 간단한 desc 명령을 포함하여 패키지로는 아무 것도 할 수 없습니다. 코드를 체크 아웃 :오라클 패키지와 동의어 사용

이 패키지는 SQL을 작성

create or replace PACKAGE pkg_elmah$log_error 
IS 
    PROCEDURE LogError 
    (
     v_ErrorId IN elmah$error.errorid%TYPE, 
     v_Application IN elmah$error.application%TYPE, 
     v_Host IN elmah$error.host%TYPE, 
     v_Type IN elmah$error.type%TYPE, 
     v_Source IN elmah$error.source%TYPE, 
     v_Message IN elmah$error.message%TYPE, 
     v_User IN elmah$error.username%TYPE, 
     v_AllXml IN elmah$error.allxml%TYPE, 
     v_StatusCode IN elmah$error.statuscode%TYPE, 
     v_TimeUtc IN elmah$error.timeutc%TYPE 
    ); 

END pkg_elmah$log_error; 

는 동의어 및 (안 소유자의 사용자에서 실행) 테스트 SQL

CREATE SYNONYM pkg_elmah$log_error FOR DRSP.pkg_elmah$log_error; 
desc pkg_elmah$log_error; 
---------RESULT: object does not exist 
execute pkg_elmah$log_error.logerror; 
---------RESULT: identifier pkg_elmah$log_error must be declared 

이 코드 만들기 (소유자의 사용자에서 실행) 이 객체의 소유자와 로그인 할 때 잘 실행하십시오.

그랜트가 다음과 같이 주어졌다 (그것이 ORA-04042주기 때문에 나는 단지 절차를 제공 할 수없는 것, 그래서 패키지 준) :

grant execute on PKG_ELMAH$LOG_ERROR to not_owner 

환경 : WINDOWS 7 64bit를을 ; SQL 개발자 4.0.3.16; 동의어의 Oracle 클라이언트 11.2

상세 사항 : 패키지의
Details of the synonym.

세부 사항 : 당신은 잘못된 순서로 일을하거나 그렇지 않으면 말할 생략 한
package details

+0

동의어 소유자에게 권한 실행을 제공했다고 가정합니다. –

+0

나는 절차에 대해서만 그것을 할 수없는 것처럼 패키지에 그랜트를 줬다. –

+0

명령에 스키마를 추가합니다.'CREATE SYNONYM [SCHEMA] .pkg_elmah $ log_error FOR DRSP.pkg_elmah $ log_error; ' –

답변

2

우리에게 뭔가. 올바른 순서로 수행 된 지시가 예상대로 작동하기 때문에 :

SQL> conn a/a 
Connected. 
USER is "A" 
SQL> create or replace PACKAGE pkg_elmah$log_error 
    2 IS 
    3 PROCEDURE LogError 
    4  (
    5  v_ErrorId IN number, 
    6  v_Application IN varchar2, 
    7  v_Host IN varchar2, 
    8  v_Type IN varchar2, 
    9  v_Source IN varchar2, 
10  v_Message IN varchar2, 
11  v_User IN varchar2, 
12  v_AllXml IN varchar2, 
13  v_StatusCode IN varchar2, 
14  v_TimeUtc IN date 
15  ); 
16 
17 END pkg_elmah$log_error; 
18/

Package created. 

SQL> grant execute on PKG_ELMAH$LOG_ERROR to b 
    2/

Grant succeeded. 

SQL> conn b/b 
Connected. 
USER is "B" 
SQL> CREATE SYNONYM pkg_elmah$log_error FOR A.pkg_elmah$log_error; 

Synonym created. 

SQL> desc pkg_elmah$log_error 
PROCEDURE LOGERROR 
Argument Name     Type     In/Out Default? 
------------------------------ ----------------------- ------ -------- 
V_ERRORID      NUMBER     IN 
V_APPLICATION     VARCHAR2    IN 
V_HOST       VARCHAR2    IN 
V_TYPE       VARCHAR2    IN 
V_SOURCE      VARCHAR2    IN 
V_MESSAGE      VARCHAR2    IN 
V_USER       VARCHAR2    IN 
V_ALLXML      VARCHAR2    IN 
V_STATUSCODE     VARCHAR2    IN 
V_TIMEUTC      DATE     IN 

SQL> exec pkg_elmah$log_error.logerror 
BEGIN pkg_elmah$log_error.logerror; END; 

     * 
ERROR at line 1: 
ORA-06550: line 1, column 7: 
PLS-00306: wrong number or types of arguments in call to 'LOGERROR' 
ORA-06550: line 1, column 7: 
PL/SQL: Statement ignored 


SQL>