[英]Oracle Throwing SQL Error when creating a View
我正在嘗試在Oracle數據庫中創建視圖,但始終收到ORA-00907錯誤(缺少正確的括號)。 我的SQL如下:
CREATE VIEW my_view AS
(
SELECT metadata.ID,metadata.Field1,metadata.Field2,metadata.Field3,metadata.Field4,attribute1.StrValue AS Attr1, attribute2.StrValue AS Attr2
FROM metadata,data AS attribute1,data AS attribute2
WHERE
(
metadata.Type = 'TYPE1'
)
AND
(
metadata.ID = attribute1.ID AND attribute1.name = 'attr1'
)
AND
(
metadata.ID = attribute2.ID AND attribute2.name = 'attr2'
)
)
表元數據定義實體,數據定義這些實體的屬性。
這在MS SQL和MySQL中可以正常工作,但是我一直從Oracle收到上述錯誤。
與Oracle的合作時間不長,因此我對它的怪癖不甚了解。
CREATE VIEW my_view AS
(
SELECT metadata.ID,metadata.Field1,metadata.Field2,
metadata.Field3,metadata.Field4,
attribute1.StrValue AS Attr1, attribute2.StrValue AS Attr2
FROM metadata, data /* No AS here */ attribute1,
data /* No AS here */ attribute2
WHERE
(
metadata.Type = 'TYPE1'
)
AND
(
metadata.ID = attribute1.ID AND attribute1.name = 'attr1'
)
AND
(
metadata.ID = attribute2.ID AND attribute2.name = 'attr2'
)
)
我刪除了data
和attribute1
之間的AS
既然您的括號都不是必需的,並且它們使閱讀代碼更加困難,那么為什么不刪除它們呢?
您需要在FROM子句中刪除AS。 Oracle允許使用可選的AS為列名加上別名,但不允許提供別名
SQL> ed
Wrote file afiedt.buf
1 CREATE VIEW my_view AS
2 (
3 SELECT metadata.ID,metadata.Field1,metadata.Field2,metadata.Field3,metadata
.Field4,attribute1.StrValue AS Attr1, attribute2.StrValue AS Attr2
4 FROM metadata,data attribute1,data attribute2
5 WHERE
6 (
7 metadata.Type = 'TYPE1'
8 )
9 AND
10 (
11 metadata.ID = attribute1.ID AND attribute1.name = 'attr1'
12 )
13 AND
14 (
15 metadata.ID = attribute2.ID AND attribute2.name = 'attr2'
16 )
17* )
SQL> /
View created.
取決於所使用的工具,知道SQL * Plus可以准確地向您顯示語法錯誤發生的位置可能很有用-下面的代碼段顯示它反對AS關鍵字。
SQL> ed
Wrote file afiedt.buf
1 CREATE VIEW my_view AS
2 (
3 SELECT metadata.ID,metadata.Field1,metadata.Field2,metadata.Field3,metadata
.Field4,attribute1.StrValue AS Attr1, attribute2.StrValue AS Attr2
4 FROM metadata,data AS attribute1,data AS attribute2
5 WHERE
6 (
7 metadata.Type = 'TYPE1'
8 )
9 AND
10 (
11 metadata.ID = attribute1.ID AND attribute1.name = 'attr1'
12 )
13 AND
14 (
15 metadata.ID = attribute2.ID AND attribute2.name = 'attr2'
16 )
17* )
SQL> /
FROM metadata,data AS attribute1,data AS attribute2
*
ERROR at line 4:
ORA-00907: missing right parenthesis
其他人指出您的FROM子句中的AS關鍵字是問題。 我建議以下內容作為更清晰,更易讀的同一語句版本:
create view my_view as
select
meta.id
,meta.field1
,meta.field2
,meta.field3
,meta.field4
,att1.strvalue as attr1
,att2.strvalue as attr2
from
metadata meta
,data att1
,data att2
where meta.id = att1.id
and meta.id = att2.id
and meta.type = 'TYPE1'
and att1.name = 'attr1'
and att2.name = 'attr2'
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.