2017-03-08 5 views
0

私はsybaseでWHILEを使用する際に非常に奇妙な問題が発生します。 なぜこのコードが実行します。Sybase: ';'を使用すると、WHILE文で非常に奇妙な動作が発生する。

BEGIN 
WHILE 'toto' = 'titi' 
BEGIN 
    DECLARE @val int 
    SELECT * FROM randomtable1 
    SELECT * FROM randomtable2 
    END 
END 

そしてませんこれを?

BEGIN 
DECLARE @val INT; 

WHILE 'toto' = 'titi' 
BEGIN 
    DECLARE @val int 
    SELECT * FROM randomtable1 
    SELECT * FROM randomtable2 
END 
END 

実際、私は「;」を使用する瞬間に気づきました。私のスクリプトでは、WHILE文の内外で、SybaseはWHILEの直後にBEGINの近くに構文エラーを返します。 私はsybaseのドキュメントと検索を読んで再読しましたが、ここで何が起こったのか分かりません。

私が示す例は、私が持っているエラーを再現する単純化ですが、これは私がやろうとしている実際のスクリプトではありません。

私はインターンシップで、初めてSybaseを発見しています。私は怖いです。

あなたは(一部はまた、SQL AnywhereでサポートされているのSybase ASEから)はWatcom SQL(オリジナル、ネイティブSQLどこでも方言)とTransact-SQLを混合しているように見え事前

答えて

1

感謝。同じSQLバッチで2つを混在させることはできません。

  • Watcomは、 ';'を使用します。文の区切り文字として、Transact-SQLは ';'

  • Transact-SQLはWHILEを使用しているように、文のグループ化にBEGIN-ENDを使用します。ただし、Watcomでは、BEGIN-ENDは文をグループ化せず、例外処理の単位です。

  • Watcomでは、 'WHILE ... LOOP ... END LOOP;'を使用します。構文

+0

この回答ありがとうございます、それは多くの助けになります! – Cheniflo

関連する問題