ホーム › フォーラム › A5:SQL Mk-2掲示板 › syntax error at or near “LIMIT”
- このトピックには5件の返信、2人の参加者があり、最後ににより5年、 7ヶ月前に更新されました。
-
投稿者投稿
-
nisshyゲスト
いつも便利に使わせていただいております。
心底感謝しております。以前から、 PostgreSQL 直接接続で 「syntax error at or near “LIMIT”」というエラーが時折表示されて、どういう条件の時に表示されるか、わからなかったのですが、今回、エラーになるパターンの SQL と、正常なパターンの SQL の違いに気づきましたので、お知らせします。
利用バージョンは
2.13.3 x64
PostgreSQL 9.5.4, compiled by Visual C++ build 1800, 32-bit■ NG パターン
1234select -- テスト1limit 1;■ OK パターン
— テスト1234select1limit 1;以上です。
品質向上のためのお役に立てると良いのですが。
これからもがんばってくださいませ。
応援しています。nisshyゲストcode タグを使ったら、変になってしまいました。。
code タグなしで書くと、以下の通りです。■ NG パターン
select — テスト
1
limit 1
;■ OK パターン
— テスト
select
1
limit 1
;要は、「– テスト」というコメントの置き場所が影響しているようです。
karaゲストlimit句はコメント位置で回避可能のようですが
fetch first row only
でも同様のsyntax errorが発生し、こちらはコメント有無や位置を変えても回避できません。ご確認頂けますと幸いです。
松原正和キーマスターnisshyさん、karaさんこんにちは。
はい、現象を確認しました。MySQLで limit 句が正しく処理できない不具合を Version 2.14.2 beta 1 及び、Version 2.15.0 beta 1で修正しました。
オプションダイアログで「結果セット最大行数」(デフォルト 10000)が指定されていると、内部的にlimit句が追加されて、二重に追加されたlimit句がエラーになっているようでした。A5:SQL Mk-2では、limit句などが指定されていると、「結果セット最大行数」のオプション値を無視していたのですが、limit句が指定されているか調べるためにSQLをパースする処理で1行コメントの解析に失敗していたようです。
karaさんの 「fetch first row only」についてですが、これは IBM Db2の構文だと思うのですが、あっていますでしょうか?Version 2.15.0 beta 1などでも発生しますでしょうか?。karaゲスト松原さん
ご確認ありがとうございます。
fetch構文は以前db2用でしたが現在では標準SQL構文の認識です。ORACLE 12c以降、Postgresでもサポートされています。
https://www.oracle.com/technetwork/jp/database/articles/tsushima/tsushima-hakushi-37-2202125-ja.html
https://www.postgresql.jp/document/9.0/html/sql-select.html#SQL-LIMIT事象はPostgresにて確認しておりました。
設定で結果セット最大行を0にすることで回避出来ること確認できました。ORACLEでは
ORA-00933:SQLコマンドが正しく終了されていません。
となります。
これはサーバーバージョンの問題かもしれません。※Version 2.15.0 beta 1で確認しました
一応現在の開発ではPostgresでfetch構文を使いたかったので、ご教示頂いた回避法で問題ありません。
(実装は出来ていたがa5m2で検証できなくて困っていた)松原正和キーマスターkaraさんこんにちは。
Version 2.15.0 beta 2以降で、FETCH FIRST n ROWS ONLYに対応してみました。ご確認ください。 -
投稿者投稿