2009-04-08 3 views
1

Oracle 데이터베이스에서보기를 만들려고하지만 ORA-00907 오류가 발생합니다 (오른쪽 괄호가 누락 됨). 내 SQL은 다음과 같습니다 :보기를 만들 때 Oracle에서 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에서 위의 오류가 계속 발생합니다.

오라클과 너무 오랫동안 함께 작업하지 않았으므로 그 단점에 대해 많이 알지 못합니다.

답변

3

FROM 절에서 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. 

에 대한 AS 옵션, 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 
+0

+1, sqlplus 힌트와 좋은 접촉 ... – DCookie

4
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' 
     ) 
) 

나는 당신의 괄호 전혀 필요 없기 때문에 dataattribute1

+0

+1을, 답은 항상 명확하고 포인트 – DCookie

3

사이 AS를 제거하고 코드 열심히, 왜 그들을 제거하지 판독을 할?

+0

에 그것은하지 parenteses, 그것은 오류를보고 할 수있는 좋은 오라클 구문 분석기의 방법 . Oracle은 테이블 이름과 별명 사이의 AS를 인식하지 않습니다. – Quassnoi

2

다른 사람은 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' 
관련 문제