2012-08-05 115 views
-4

我試圖創建包含列HospitalCode,WardNo,BedNo,DateLastServiced的視圖,並將這些列命名爲Hospital,Ward,Bed and Last Serviced。在Oracle中創建視圖時出錯

CREATE VIEW HospitalCode, WardNo, BedNo, DateLastServiced 
AS SELECT * FROM BED, WARD 

我得到這個錯誤,說我錯過了一個關鍵字。任何人都可以幫忙嗎?

+2

哪裏視圖名稱? – Mat 2012-08-05 08:51:43

+1

BED和WARD之間沒有聯接? – 2012-08-05 08:55:03

+3

在發佈所有語法錯誤之前,您是否至少嘗試閱讀手冊? – 2012-08-05 09:04:53

回答

0

你錯過了名視圖試試這個:

CREATE VIEW MyView1 AS SELECT HospitalCode, WardNo, BedNo, DateLastServiced 
FROM BED, WARD 

而且我不知道SELECT,因爲我沒有你的表結構。

UPDATE

ORA-00918: column ambiguously defined

此錯誤意味着,這兩個表的牀,具有WARD相同的列名,所以Oracle不能確定要使用哪一個兩個表。

DESCRIBE TABLE BED; 
DESCRIBE TABLE WARD; 
+0

我從你所說的內容中得到了這個:ORA-00918:明確定義的列 – jeremy 2012-08-05 08:57:11

+0

查看更新後的答案。 – rkosegi 2012-08-05 09:03:20

+0

@rkosegi,你建議OP做笛卡爾連接,這幾乎肯定不是他們想要的。 – Ben 2012-08-05 09:10:04

3

後輸出你在你的SQL三個錯誤:

  1. 你的語法創建的觀點是錯誤的
  2. 您沒有在兩個表之間的連接條件
  3. 您不指定哪個列屬於哪個表。

要定義在視圖中列的名稱,你可以在CREATE VIEW語句中的視圖名稱後面列出它們(如documented in the manual

CREATE VIEW MyView1 
(
    hospital, 
    Ward, 
    Bed 
    Last_Serviced 
) 
AS 
SELECT bed.HospitalCode, 
     ward.WardNo, 
     bed.BedNo, 
     ward.DateLastServiced 
FROM BED 
    JOIN WARD on bed.bedno = ward.bedno; 

當你沒有張貼的定義涉及兩個表我必須猜測哪一列來自哪個表。 您必須調整選擇以調整缺少的信息。但它應該給你足夠的信息

另一種選擇更改視圖列的名稱使用列別名來選擇原始列:bed.HospitalCode as hospital

+0

我已經改成了這個基於從該表中,但現在我得到的錯誤ORA-00907的列上:缺少右括號 – jeremy 2012-08-05 09:12:12

+0

CREATE VIEW MyView1 ( 醫院, 病房, 牀 Last_Serviced ) AS SELECT病房.HospitalCode, bed.WardNo, bed.BedNo, bed.DateLastServiced FROM BED JOIN WARD on bed.bedno = ward.bedno; – jeremy 2012-08-05 09:12:59

+0

@jeremy:你在'Bed'和'Last_Serviced'之間缺少一個逗號。 – eggyal 2012-08-05 09:13:24