Technology Blogs by SAP
Learn how to extend and personalize SAP applications. Follow the SAP technology blog for insights into SAP BTP, ABAP, SAP Analytics Cloud, SAP HANA, and more.
cancel
Showing results for 
Search instead for 
Did you mean: 
Sawa_Ito
Product and Topic Expert
Product and Topic Expert
0 Kudos

このページは、以下の英語ページの抄訳です。最新の情報については、英語ページを参照してください。

 

 

 

この記事のオリジナルは、Glenn Paulley が sybase.com に 2010 年 4 月に掲載したものです。その中で、Glenn は SQL Anywhere パーサーがどのようにしてキーワードを認識するのか説明しています。

 

 

SQL Anywhereでは、新しいバージョンがリリースされるたびに追加の SQL 機能を実装してきました。これらは、標準 SQL の強化によってもたらされたものや、我々独自の製品イノベーションによるものです。

 

例えば SQL Anywhere の version 12 では、標準SQL:2008 の 「distinct predicate」をサポートしています。これは、シンタックス X IS [ NOT ] DISTINCT FROM Y を持ち、二つの表現値を比較して、NULL をイコールの比較演算子として扱うことが可能です。

 

distinct predicate は、状況によってはたいへん便利です。特にストアドプロシージャーパラメーターを含み、表現が NULL でありうる場合に異なる SQL 構造を特定する必要性を好まない場合に便利です。

 

(余談ですが: distinct predicate がユーティリティーを持つ可能性がある一方で、同時に、SQL の "normal" 3-valued logic からのこのような偏りは、間違いなく、すでに混乱していてどこかで長々と議論されている NULL に絡む問題を増加させることになります。)

 

distinct predicate の場合、そのシンタックスは直線的な採用と実装が可能です。なぜならば、そのシンタックスには、- 間違いなく幾分不格好ですが - 少なくとも新しい予約語は含まれないからです。残念ながら、SQL では、追加の機能性が追加のキーワードを必要とすることがルールであることがよくあります。これらのキーワードは、文をパースする際に、曖昧性を避けるために予約語にする必要があります。

 

我々は、SQL Anywhere サーバーのYACC のカスタムビルドの実装に対して、「non_keywords」 接続オプションを長く提案してきました。このオプションは、識別子として使用できるようユーザーまたはアプリケーション側で特定のキーワードをオフにすることができます。

例えば、以下のように特定することができます。

 





  1. SET OPTION non_keywords = 'TRUNCATE, SYNCHRONIZE';




 

SQL Anywhere のバージョン 12 では、この柔軟性を一歩進め、追加の接続オプション "reserved_keywords" をサポートしています。

この新しいオプション実装の背景には、サーバーがより容易に、自動的に、out-of-the-box (箱から出してすぐの状態) でアップグレードできるようにするという意図があります。例外として、お客様のアプリケーションとの競合の可能性が高い時場合の SQL 文法からのキーワードは除きます。

 

具体的な例として、SQL Anywhere 12 では、MySQL アプリケーションを開発する人にはよく知られている LIMIT OFFSET 句をサポートしています。

LIMITOFFSET は、機能的には SELECT TOP ... START AT とほぼ同じです。しかしながら、LIMITを SQL 文法に導入するには、これが予約キーワードである必要があります。潜在的には、「limit」 を識別子として使用する既存のアプリケーションを壊してしまうことになります。そのため、LIMITのサポートは導入したものの、デフォルトではこれを無効にしておくことにしました。LIMIT 句 の使用を有効にするには、以下経由のキーワードとして有効にすることができます。

 





  1. SET OPTION PUBLIC.reserved_keywords = 'LIMIT';




 

サーバー内でワードがキーワードとして識別されたかどうかは、以下で決まります。 (優先順に):

  • SQL Anywhere の予約語のリストに現れる

  • reserved_keywords オプションでオンになっている

  • non_keywords オプションを使用してオフになっている


 

reserved_keywords オプションにより、SQL 言語の拡張サポートにおけるさらなる柔軟性を提供できるようになりました。

今後のSQL Anywhere リリースで追加される SQL 機能において、このオプション を有効活用したいと考えています。

 

 

 

 

===

 

SAP SQL Anywhere に関する詳細情報は、SAP SQL Anywhere Communityページ<英語> を参照してください。

 

上記のコミュニティーに掲載されている技術情報は、順次SQL Anywhere 日本語コミュニティ

に掲載しています。

 

SQL Anywhere に関してはまずはこちらをご参照ください。無期限でご利用いただける無償の Developers Edition もこちらからダウンロードが可能です。

 

SQL Anywhere に関して技術的な質問のある方はコミュニティに登録し、
「Ask a Question」機能をご利用ください。

Language には「Japanese」、
Primary Tag には「SAP SQL Anywhere」を選択
User Tagに「sql anywhere」「sql anywhere Japanese question」

を入力してください。

不具合につきましては、サポート契約者様専用の問い合わせ方法にてお問い合わせください。

 

======================
ご購入に関するお問い合わせ

こちらよりお問い合わせください。