2009-04-18 18 views
2

私のクエリは:クエリで「ORA-00933:SQLコマンドが正しく終了しません」というエラーが発生するのはなぜですか?

CREATE VIEW cambiodatos AS 
SELECT 
    a.last_name||','||a.first_name AS "Nombre", 
    a.salary AS "Salario", 
    b.name AS "Nombre Departamento", 
    c.name AS "Nombre de Region" 
FROM 
    s_emp a, s_dept b, s_region c 
WHERE 
    a.dept_id = b.id AND b.region_id = c.id 

UPDATE 
    cambiodatos 
SET 
    name = 'North America' 
WHERE 
    last_name = 'Biri'||','||first_name = 'Ben' 

エラー:あなたが欲しいなど

ORA-00933: SQL command not properly ended 

答えて

0

が見える、私は全く過去7中にOracleを使用していない

UPDATE 
    cambiodatos 
SET 
    name = 'North America' 
WHERE 
    last_name = 'Biri' AND first_name = 'Ben' 
+0

last_nameまたはfirst_nameのいずれも列として表示されません。 –

+0

修正しますが、その問題を修正すると問題のエラーメッセージが取り除かれますが、後で別のエラーメッセージが生成されます。 –

0

更新中何年もかかりますが、必要はありません。声明の最後に?

+0

いいえ、Oracle SQL文の最後にセミコロンは必要ありませんが、この文を使用して、文が完了していることをsqlplusに伝えることができます。しかし、それはまた、SQL文の後の行で '/'を使っても起こります。いずれもなければ、文はDBサーバに送られないので、コマンドの終了に関するエラーは生成されません。 –

+0

@Shannon Severanceもちろん、あなたは正しかったが、それは私が彼に説明しようとしていたものであった(たとえQuassnoiがそれを良くしたとしても)。ステートメントが正しく終了していないとOracleから伝えられたので、私はsqlplusから送信していると仮定しました。これはOracle固有のものではなく、ほとんどのデータベースは同じように動作します。 ';'ほとんど常に有効ですが、ほとんどの場合、代替エンディングもあります。この場合、CREATE VIEWとUPDATEが処理され、CREATE VIEW文が間違って終了している必要があるため、UPDATEキーワードが表示されていることを確認したときに文全体が確実に確認されます。 – Fredrik

+0

それで、私は投票を修正することはできません。申し訳ありません。 –

0

まず、あなたのUPDATEコマンドのフォーマットが間違っていると思います。次に、更新を実行しているビューではなく、元のテーブルのフィールドを使用しています。また、私はあなたが結合に基づいてビューを更新できるとは思わない。このquestionへの応答を参照してください。あなたがこのように見えるかもしれないならば。

UPDATE 
    cambiodatos 
SET 
    [Nombre de Region] = 'North America' 
WHERE 
    Nombre = 'Biro, Ben' 
-1

が a.last_nameを選択するとVIEWのcambiodatosをCREATE || '' || "ノンブル"、 "Salario" AS a.salary、 "ノンブルDepartamento" AS b.name AS a.first_name 、 c.name AS "Nombre de Region" FROM s_emp a、s_dept b、s_region c WHERE a.dept_id = b.id AND b.region_id = c.id;/*セミコロンがありませんか? */

UPDATE cambiodatos SET 名= '北アメリカ WHERE LAST_NAME = 'ビリ' || '' || FIRST_NAME = 'ベン'/ *行方不明とLAST_NAME = <>とFIRST_NAME = <> */

1

まず、セミコロンであなたのクエリを分離し、あなたのSET条件を修正:あなたのエラーの理由です

CREATE VIEW cambiodatos AS 
SELECT 
    a.last_name||','||a.first_name AS "Nombre", 
    a.salary AS "Salario", 
    b.name AS "Nombre Departamento", 
    c.name AS "Nombre de Region" 
FROM 
    s_emp a, s_dept b, s_region c 
WHERE 
    a.dept_id = b.id AND b.region_id = c.id; 

UPDATE 
    cambiodatos 
SET 
    name = 'North America' 
WHERE 
    last_name = 'Biri' 
    AND first_name = 'Ben' 

ORA-00933

第2に、作成したビューにフィールドnameが含まれていないため、UPDATEステートメントが失敗します。

UPDATE 
    cambiodatos 
SET 
    "Nombre de Region" = 'North America' 
WHERE 
    "Nombre" = 'Biri, Ben' 

を、しかしs_regionは、このビューでkey-preservedではないとして、おそらく失敗します。

このクエリは、コンパイルされます。更新するには

、代わりにこの使用:あなたがそのエラーを取得している理由の正確な理由は、あなたがこのWHERE句を持っているということです

MERGE 
INTO s_region c 
USING (
     SELECT b.region_id 
     FROM s_emp a, s_dept b 
     WHERE a.last_name || ',' || a.first_name = 'Biri, Ben' 
       AND b.id = a.dept_id 
     ) q 
ON  c.id = q.region_id 
WHEN MATCHED THEN 
UPDATE 
SET  c.name = 'North America' 
2

を:

last_name = 'Biri'||','||first_name = 'Ben' 

これは法的な構文ではありません。

これは次のようになります。

last_name = 'Biri' AND first_name = 'Ben' 

またはこのような何か:

name = 'Biri'||','||'Ben' 

しかし、あなたはちょうどこのようにそれを書くことができます:

name = 'Biri,Ben' 

問題は、それが見えることですあなたには2番目の||そこにはAND節がありますが、それはあなたが追加しようとしているカンマには合いません。

おそらくこれを実行しようとしていますか?いずれの場合においても

last_name || ',' || first_name = 'Biri,Ben' 

他の人が指摘したように、あなたがその構文の問題を修正する場合は、あなただけの列名が欠落について、他のエラーメッセージが表示されます。

関連する問題