MariaDB Server 10.3に戻って、新しいSQLモード(SQL_MODE =ORACLE)を追加して、構造化照会言語(SQL)の手続き型拡張であるOracle PL/SQLのサブセットとの互換性を提供しました。 MariaDB Community Server 10.6の最近のリリースでは、ROWNUM()
などのいくつかの関数を追加することにより、MariaDBのPL/SQL互換性を拡張するための旅を続けてきました。 、ADD_MONTHS()
およびTO_CHAR()
。これはいくつかの理由で非常に優れていますが、最初に、MariaDBはオープンソースのOracle互換性を実装する唯一のデータベースであるため、この機能はすべての人が利用できます。それが何を意味するのかを真に理解するには、少し前に戻って理由を理解することが重要です。 そもそもこの道を歩み始めました。
手続き型プログラミングと宣言型プログラミングの力
SQL言語のデータ操作能力と手続き型機能を組み合わせることにより、開発者は多くの刺激的で新しい機会を得ることができます。 PL / SQLを使用すると、開発者は「何をするか」という宣言型アプローチに焦点を当てたSQL文を実行できると同時に、操作の流れまたは「どのように行うか」を制御する機能も提供されます。
待って、何? OK、次の従来のを検討してください SQLステートメント。
SELECT id, name, has_kids FROM friends;
シンプルでエレガント、そして効果的。 SQLは美しい言語ですが、制限があります。たとえば、SELECT
から返された結果をループしたい場合はどうでしょうか。 ステートメントの実行?次に、結果を解析しながら、条件付きステートメントを使用して各結果を確認します(たとえば、has_kids
の場合) 本当です)それらの条件に基づいて特定の操作を実行できるようにしますか?
クイックノート :これは純粋に架空のものです。子供がいる友達と子供がいない友達がいる場合は、すべて同じように扱うと確信しています。しかし、この例のために、そうではないとしましょう。わかった? OK、かっこいい。
しかし、これらすべての反復と条件が発生すると、エラーが発生する可能性があります。最初に元の結果をアプリケーションコードに戻して処理することなく、データベース側でエラー(つまり例外)を直接処理できたら素晴らしいと思いませんか?ええと、それは残念です。なぜなら、あなたは単純な古いSQLを使用していて、それらのことはどれも不可能だからです。
恐れるな!代わりに、私と一緒にPL / SQLのすばらしい世界に来てください!
PL / SQLブロックと呼ばれるものを使用することで、使い慣れたSQLと、変数の宣言、条件の処理、ループなどの機能を使用して操作のフローを制御できる手続き型機能を組み合わせることができます。データを介して、例外を管理するなど。
PL /SQLブロックはMariaDBServer内で処理され、SQLおよび手続き型ステートメントがそれに応じて解析および実行されます。
かなりかっこいいですよね?それはとても良くなります!しかし、前の例に戻ります。単一のPL/SQLブロックを使用して、前に示したすべてを実行できます。
例:
DELCARE CURSOR c IS SELECT id, name, has_kids FROM friends; BEGIN FOR friend_row IN c LOOP IF friend_row.has_kids == true THEN /* Do something */ ELSE /* Do something else */ END IF; END LOOP; EXCEPTION WHEN no_data_found THEN /* Handle no data found */ WHEN others THEN /* Handle all other kinds of exceptions */ END;
詳細h3>
強力なものでしょ?まあ、このブログ投稿は本当に氷山の一角にすぎません。あなたがそうするなら、あなたの食欲を刺激するための少しの何か。ただし、詳細を知りたい場合は、最近発表したウェビナー、MariaDBとPL / SQL:SQLと手続き型ステートメントの組み合わせをご覧になることを強くお勧めします。その中で、PL / SQLサポートを追加および拡張することを使命とした理由についてさらに詳しく説明し、さまざまな例とライブコーディングのデモンストレーションを含めて、その方法を直接確認します。 MariaDB内でPL/SQLを使用できます。ハッピーコーディング、友達!