2013-07-23 3 views
0

나는 아래와 같이 DB 링크를 통해 두 테이블에서 데이터를 가져 오기 위해 쿼리가 있습니다수 없습니다

SELECT a.ID, a.NAME, b.address 
    FROM [email protected] a, [email protected] b 
WHERE a.ID = b.ID; 

이 완벽하게 잘 작동합니다. 그런 다음 아래와 같이보기를 만듭니다.

CREATE VIEW myview 
AS 
    SELECT a.ID, a.NAME, b.address 
    FROM [email protected] a, [email protected] b 
    WHERE a.ID = b.ID; 

보기가 성공적으로 생성되었습니다. 나는 다음과 같이 뷰에서 데이터를 선택할 때 :

ORA-00942: table or view does not exist 
ORA-02063: preceding line from MYLINK 

은 무엇 아마 문제가 될 수 :

SELECT * 
    FROM myview 

나는 오류 같은거야?

편집 :

시도 다른 방법은 다른 오류가 끝났다. 내가 쿼리에서 직접 선택하려고하면

CREATE OR REPLACE VIEW plan_view 
AS 
    WITH plan_name AS 
     (SELECT  fcr.argument1 AS plan_name, fcr.request_id AS request_id 
       FROM [email protected] fcr 
       WHERE argument1 IN 
          ('E10', 'E20', 'E40', 'E60L', 'EDC', 'PS1', 'S') 
     CONNECT BY PRIOR fcr.request_id = fcr.parent_request_id 
     START WITH request_id =         -- '58043920' 
         (SELECT MAX (request_id) AS request_id 
          FROM [email protected] 
         WHERE description = 'Mail Program' 
          AND actual_start_date >= 
            TO_DATE ( TO_CHAR (TRUNC (SYSDATE - 1), 
                 'mm-dd-yyyy' 
                ) 
              || '05:00:00 PM', 
              'MM-DD-YYYY HH:MI:SS PM' 
             ) 
          AND actual_start_date < SYSDATE)), 
     e10 AS 
     (SELECT  TRIM 
         (BOTH ' ' FROM (SELECT meaning 
             FROM apps.fnd_lookup_[email protected] 
             WHERE lookup_type = 'CP_STATUS_CODE' 
              AND lookup_code = fcr.status_code 
              AND view_application_id = 0) 
         ) status, 
        TRIM 
         (BOTH ' ' FROM (SELECT meaning 
             FROM [email protected] 
             WHERE lookup_type = 'CP_PHASE_CODE' 
              AND lookup_code = fcr.phase_code 
              AND view_application_id = 0) 
         ) phase, 
        fcr.request_id AS rid, 
        fcr.actual_start_date AS start_date, 
        fcr.actual_completion_date AS completion_date 
       FROM [email protected] fcr 
     CONNECT BY PRIOR fcr.request_id = fcr.parent_request_id 
     START WITH request_id = (SELECT request_id 
            FROM plan_name 
            WHERE plan_name IN ('E10'))) 
    SELECT 'E10' "PLAN_NAME", (SELECT MIN (start_date) 
           FROM e10) "START_DATE", 
      (SELECT COUNT (rid) 
      FROM e10) 
    FROM DUAL 

내가 적절한 출력을 얻을 : 여기가 정확한 쿼리 및 최신 오류를 게시하고있다. 내가보기를 만들고 select * from plan_view을 시도한 후에하지만 아래의 오류 :

ORA-00604: error occurred at recursive SQL level 1 
ORA-00904: "FCR"."REQUEST_ID": invalid identifier 
+0

@zephrus : 뷰를 작성하는 경우 원격 데이터베이스에서 보신 다음 db 링크를 사용하여 뷰에 액세스하시지 않습니까? –

+0

이것이 실제로 문제입니다. 상위 DB에서 일부 내부 정책처럼보기를 만들 수 없습니다. 그리고 두 번째 데이터베이스에서 생성 된이 뷰는 다른 DB에서도 dblink를 통해 액세스됩니다. – zephyrus

+0

세 번째 컬럼에는 이름이 없기 때문에'ORA-00998 : 컬럼 별칭으로이 표현식의 이름을 지정해야합니다 .'라는 오류 메시지가 나타납니다. 가능한 한 가장 작은 예제로 샘플 코드를 축소하여 여전히 오류가 발생할 수 있습니다. –

답변

1

이 권한을 부여하여 이전 문제 같은 소리. Ad Hoc DML (선택, 삽입 등)의 경우 역할을 통해 부여 된 권한을 사용할 수 있습니다. 그러나 뷰, 저장 프로 시저 등의 영구 객체를 빌드하려면 사용자에게 직접 권한을 부여해야합니다.

그래서 설명하는 현상에 대한 가장 일반적인 설명은 테이블의 소유자가 사용자가 아닌 해당 테이블에 대한 권한을 부여한 것입니다.