2

私のクエリ:

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
4

6 に答える 6

2

このエラーが発生する正確な理由は、次の WHERE 句があるためです。

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'

いずれにせよ、他の人が指摘したように、その構文の問題を修正すると、列名が欠落しているという他のエラーメッセージが表示されます。

于 2009-04-20T09:42:50.330 に答える
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

次に、UPDATE作成したビューに field が含まれていないため、ステートメントは失敗しますname

このクエリは次のようにコンパイルされます。

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

、しかし、このビューにs_regionないため、ほとんどの場合失敗します。key-preserved

更新するには、代わりにこれを使用します。

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'
于 2009-04-20T09:29:40.440 に答える
0

アップデートでANDが必要なようです

UPDATE 
     cambiodatos 
SET 
     name = 'North America'
WHERE 
     last_name = 'Biri' AND first_name = 'Ben'
于 2009-04-18T20:04:17.937 に答える
0

私は過去7年間、Oracleをまったく使用していませんが、必要ありません。ステートメントの最後に?

于 2009-04-18T20:05:29.743 に答える
0

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

UPDATE 
     cambiodatos 
SET 
     [Nombre de Region] = 'North America'
WHERE 
     Nombre = 'Biro, Ben'
于 2009-04-18T20:09:23.167 に答える