2011-09-16 5 views
2

Oracle에서 저장 프로 시저를 실행하는 동안 문제가 발생합니다. 다음은 Oracle 저장 프로 시저의 오류

는 저장 프로 시저입니다 :

CREATE OR REPLACE Procedure xxxlist 
    (yyyid in NUMBER)  
IS 
    xid number(6); 
    cursor c1 is select distinct xxxID from MXS.Y where YID=yyyid; 
BEGIN 
IF NOT c1%ISOPEN THEN 
    OPEN c1; 
END IF; 
LOOP 
    FETCH c1 into xid; 
    dbms_output.put_line(TO_CHAR(xid)); 
    EXIT WHEN c1%NOTFOUND; 
END LOOP; 
CLOSE c1; 
END; 

내가 저장 프로 시저를 만들 때, 나는 다음과 같은 오류 얻을 :

Warning: Procedure created with compilation errors. 

내가 위에 나에게 자세한 정보를 제공하기 위해 아래의 명령을 실행을 추상 오류 메시지.

SHO ERR; 

나는 위의 명령에 대한 응답으로 자세한 내용은 아래를 얻을 :

Errors for PROCEDURE XXXLIST: 
LINE/COL ERROR 
-------- ----------------------------------------------------------------- 
5/18  PL/SQL: SQL Statement ignored 
5/52  PL/SQL: ORA-00942: table or view does not exist 

지금, 나는 테이블 이름 또는 SQL 쿼리 자체에 문제가 있음을 이해합니다. 그래서 PRODECURE 외부에서 별도로 SQL 쿼리를 실행하여 테이블이나 쿼리가 무엇인지 확인합니다.

select distinct xxxID from MXS.Y where YID=yyyid; 

그러나 위의 쿼리에는 문제가 없습니다. 쿼리가 제대로 실행되고 적절한 결과가납니다.

따라서 실행하는 동안 프로 시저에 문제가있는 이유를 알 수 없습니다. 누구든지 도와 줄 수 있습니까?

답변

7

가능한 설명은 실행중인 계정에 역할을 통해 테이블에 대한 액세스 권한이 부여 된 것입니다. Oracle에서 역할을 통해 부여 된 액세스는 독립 실행 형 SQL 문에는 영향을 주지만 PL/SQL에 포함 된 SQL 문에는 영향을 미치지 않습니다. 이 경우

테이블의 소유자 (또는 DBA)가 직접 계정에 테이블에 선택에 대한 액세스 권한을 부여해야합니다 :

GRANT SELECT ON mxs.y TO <account>;