2016-07-20 3 views
0

(欠落している右括弧)は:OracleのSQL構文エラーこれは(右括弧が欠落)構文エラーを引き起こす理由を私は理解していない

UPDATE table 
SET doc = 
    (SELECT 'table-2844-doc' || SUBSTR(doc_file, INSTR(doc_file, '.', -1)) 
    FROM docvers 
    WHERE (docvers.table_name = 'other_table' 
      AND docvers.field_name = 'doc') 
    AND ROWNUM = 1 
    ORDER BY VERSION DESC) 
WHERE table_id = 2844 

これは右の私には見えます、SQL Serverで正しく実行取得んたとえばOracle SQL: Update a table with data from another tableなどで見つかったリクエストと同様です。

チップはありますか?

+1

これはおそらく(任意の1つの行を選択してから注文するので、何もしません)あなたが望むことはしません。しかし、明らかな構文エラーはありません。 –

+2

構文エラーです。スカラー・サブクエリ・ブロックの構文にORDER BYはありません。 – Husqvik

答えて

2

はこのようにそれを実行します。

UPDATE table 
SET doc = (
select r.myval 
from (
SELECT 'table-2844-doc' || SUBSTR(doc_file, INSTR(doc_file, '.', -1)) myval, ROWNUM RN 
FROM docvers 
WHERE docvers.table_name = 'other_table' 
AND docvers.field_name = 'doc' 
ORDER BY VERSION DESC 
) r 
where r.RN = 1 
) 
WHERE table_id = 2844 

は、最初の行を設定し、そのデータから選択し、ROWNUMを含む第一のデータセットを選択します。

+0

非常に単純なクエリを実行できるようにするためには、非常に多くの工夫が必要です。しかし、あなたの解決策はかなり明確であり、機能します。ありがとう! – user3341592

関連する問題