2013-07-23 47 views
0

我有一個查詢,如下一個數據庫鏈接來從兩個表中的數據:無法從分貝以上鍊接訪問數據的視圖獲取數據

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; 

視圖已成功創建。但是,當我從視圖中選擇數據如下:

SELECT * 
    FROM myview 

我收到錯誤,如:

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

什麼很可能是問題?

編輯:

嘗試不同的方法,並最終得到不同的錯誤。我在這裏發佈準確的查詢和最新的錯誤:

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 [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:如果你正在創建視圖,那麼爲什麼不在遠程數據庫上查看,然後使用數據庫鏈接訪問視圖? –

+0

這實際上是這裏的問題。我無法在父數據庫中創建視圖 - 就像一些內部策略一樣。而在第二個數據庫中創建的這個視圖也可以通過其他數據庫訪問,也可以通過dblink訪問。 – zephyrus

+0

您應該也會遇到這樣的錯誤:'ORA-00998:必須將該表達式命名爲列別名',因爲第三列沒有名稱。您可能希望將示例代碼縮小到仍然會導致錯誤的最小可能示例。 –

回答

1

這聽起來像是老問題授予權限。對於臨時DML(選擇,插入等),我們可以使用通過角色授予的權限。但是要構建永久對象 - 視圖,存儲過程等 - 我們必須擁有直接授予用戶的權限。

因此,您所描述的現象最常見的解釋是表的所有者已將這些表上的權限授予角色而不是您。