2012-08-05 77 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