1

私は次を実行しようとします:

select *
from tax.tax_payer@reis tp
left outer join re_right@reis r on (tp.tin = r.tin or tp.tin = r.tin_a1 or tp.tin = r.tin_a2)
where (r.right_status = -1 or r.right_status is null)
--and r.right_id is not null
and tp.je_id = 12;

しかし、取得し続けます

ORA-00933: SQLコマンドが正しく終了していません。

コメントを削除すると正常に動作しますが、なぜですか?

4

2 に答える 2

6

上記のコードは、リモート データベース接続での適切な定義により、SQL*Plus で完全に機能します。実際の実行環境には、交絡するソフトウェアがいくつかあるはずです。

「行末コメントまで」ではなく、「インラインコメント」フォームを使用してみてください。スタイル的には「;」は必要ありません。実行環境で必要な場合、または複数行の手続き型コード ブロックを送信している場合 (これはそうではありません) を除き、SQL ステートメントの末尾に配置します。

select *
  from tax.tax_payer@reis tp
       left outer join 
       re_right@reis r 
       on (   tp.tin = r.tin 
           or tp.tin = r.tin_a1 
           or tp.tin = r.tin_a2
          )
 where (   r.right_status = -1 
        or r.right_status is null
       )
    and tp.je_id = 12
 /* and r.right_id is not null */

また、ネットワーク経由でデータを取得してよりローカルなデータベースで結合を行う代わりに、すべての計算をリモート データベースに移動することもできます。(最近のバージョンの Oracle では、この最適化が行われます。)

于 2011-03-23T19:00:07.043 に答える
2

.NET では、クエリの末尾にセミコロンを付けることはできません。クエリが台無しになります。

于 2011-03-23T19:48:37.987 に答える