3

Can someone explain whats happening here?

enter image description here

Both are same query, with the only difference of multi-line and single line in SQL Developer.

The query-

SELECT (TO_TIMESTAMP('10/08/2012','DD/MM/YYYY') -NUMTODSINTERVAL(1/(24*25*60*1000),'HOUR')) a FROM dual;

The above works, but the below won't-

SELECT (TO_TIMESTAMP('10/08/2012','DD/MM/YYYY') -
              NUMTODSINTERVAL(1/(24*25*60*1000),'HOUR')) a FROM dual;
4

4 に答える 4

3

このウェブサイトによると、

「インタラクティブSQLの行をハイフン(-)で終了することにより、明示的に続けることができます。」

あなたはあなたのスクリーンショットで見ることができますEXECUTINGSELECT (TO_TIMESTAMP('10/08/2012','DD/MM/YYYY') NUMTO...

マイナス記号がありません。

于 2012-09-07T20:49:41.850 に答える
3

SQL Developerのパーサーでは、-演算子の後の引数が同じ行にある必要があるようです。...これは機能します:

SELECT (TO_TIMESTAMP('10/08/2012','DD/MM/YYYY') 
- NUMTODSINTERVAL(1/(24*25*60*1000),'HOUR')) a 
FROM dual;

したがって、問題はそれ自体が複数行ではなく-、オペランドと同じ行に演算子()を置く必要があります。なぜ正確に?バグか、最適ではない実装のどちらかだと思います。

[編集:他の人が指摘しているように、ハイフンはデフォルトの行継続文字です。これがこのように機能する理由です]

于 2012-09-07T20:44:51.327 に答える
1

sqlplusでは、行末のハイフンが行継続文字として機能します。ここで長蛇の列のセクションを続けるを参照してください。おそらくSQLDeveloperも同じことをしています。したがって、行末にハイフンを付けないでください。

于 2012-09-07T20:49:42.450 に答える
1

最初の行の最後にハイフンを追加するだけで、新しい行にマイナスを入れずに最後のクエリを実行することもできます。SQLDeveloperには長いコマンドを解釈するSQl*plusの方法があるようです
これを試してください

SELECT (TO_TIMESTAMP('10/08/2012','DD/MM/YYYY') - -
       NUMTODSINTERVAL(1/(24*25*60*1000),'HOUR')) a FROM dual
于 2012-09-07T20:51:03.037 に答える