2012-01-27 5 views
1

は、このテーブルMYTEMPから、このクエリと間違っているものを私に教えてください、選択した列の データは、カーソルインライン・ビューのクエリ

DELETE FROM (SELECT ROWNUM RM, S from mytemp) where rm > 20; 

エラーを使用して取り込まれていました次のとおりです。

ORA-01732:このビュー精度のため

+0

と同じだテーブルの名前は... 'WHERE MYTEMP。DELETE FROM ...'多分期待しますか? –

+0

大丈夫ですので、インラインビューから削除することはできませんか? – ratsy

答えて

2

編集上のデータ操作操作法的ません...ここで

がDESCRです

http://ora-01732.ora-code.com/

を試みはUPDATE、INSERTを使用するように作られた、または式または関数が含まれてい ビューにDELETE文または1つ以上 から派生した:あなたが取得しているエラーのiption表。ビューを作成するために結合操作を使用した場合、または ビューに関数または式から派生した仮想列が含まれている場合は、 のビューにしか問合せできません。

したがって、複数のテーブルを結合したり、仮想列を使用したりしない限り、更新可能なビューをテーブルに置き換えることができます。あなたの場合、問題は仮想ROWNUM列です。

+0

ありがとう、しかし、私たちは 'rownum> 20'を使うことができますか、それは常にfalseを返します...私はインラインビューを使用して選択することしかできません。インラインビューを使用してデータ操作を行うことはできません.. – ratsy

+0

あなたはそうです、それは悪い解決策でした。私は私のポストを編集して、なぜ機能しないのかを説明し、欠陥のあるSQLを取り除きました。 –

+0

Danimalに感謝します。私はまだ理解していません。仮想rownumカラムは何ですか?私はインラインビューがrwnum列のための 'rm'として出力を与えることを意味し、次にrm値が20より大きいそれらのレコードを削除しています..この仮想rownumについてもう一度説明してください..thanks again – ratsy

1

rownum>20です。

ROWNUM> xここで、xの値は正の整数よりも大きく、常にfalseです。

select * from ANYTABLE where rownum>(ANY POSITIVE INTEGER) 

はレコードを返しません。

フェッチされた最初の行には、ROWNUMが1に割り当てられ、条件は偽になります。フェッチされる2番目の行が最初の行になり、1のROWNUMが割り当てられ、条件がfalseになります。その後、すべての行が条件を満たさないため、行は戻されません。

チェックTHIS詳細については、

次の操作を行うことができます

delete from (select amount from TABLE t where t.amount=1000) 

が、それは。DELETE FROM

delete from TABLE where amount=1000 
+0

thnx bonsvr、ya knowこれは私がしたいのは、インラインビューを使ってsoemレコードを削除することです。実際のカラムとしてrownumを作成することで、インラインビューnを選択することができます。 – ratsy

+0

@ratsyはいできます。 'alter table mytemp add row_col number; update mytemp set row_col = rownum; ' – bonsvr

+0

ありがとうございましたbonsvr、ありがとうございましたtiemのために私の目的を解決しました:)ありがとう...しかし私はまだインラインビューを使って削除できないかどうかを知りたい – ratsy