コンピューター, データベース
SQLストアドプロシージャ:作成と使用
SQLストアド・プロシージャは、に格納することができる実行可能なソフトウェアモジュールであるデータベースの様々なオブジェクトの形で。 言い換えれば、それは、SQL文を含むオブジェクトです。 これらのストアドプロシージャは、良好なパフォーマンスを得るために、クライアントアプリケーションで実行することができます。 また、このような施設は、多くの場合、他のスクリプトから、あるいは他のセクションから呼び出されます。
導入
多くの人々は、彼らが様々の手順と同様であると考えてい た高レベルのプログラミング言語 (MS SQLを除いて、それぞれ)。 おそらく、これは本当です。 彼らは同様の値を発行することができ、同様のパラメータを持っています。 また、いくつかのケースでは、彼らが接触します。 例えば、それらは、DDLとDMLデータのデータベース、ならびにユーザ機能( - UDFコード名)と組み合わされます。
実際に格納されたSQLプロシージャは、プロセス間で区別利点の広い範囲を持っています。 安全性、可変性、プログラミングの生産性 - これはすべてのデータベースで作業するユーザー、より多くを魅了しています。 私は名前の«SQL Server Management Studioを»下の「Microsoft」からプログラムを得たときに人気のピークは、年2005-2010のための手順を来ました。 その助けを借りて、データベースとの仕事は、はるかに簡単に、より実用的でより便利になってきています。 年々 、この 情報を送信する方法は、 プログラミング環境で人気を博しました。 今日では、 MS SQL Serverは 、ユーザーがデータベースと「通信」するために、「エクセル」並みに立っ絶対に通常のプログラム、です。
あなたがプロシージャを呼び出すと、それは瞬時に不要なプロセスやユーザーの介入なしにサーバーによって処理されます。 削除、実行、変更:あなたは、その情報を持つ任意のアクションを実行することができます。 このすべての上に単独でこれらのオブジェクトに複雑なアクションを実行するDDL-演算子です。 そして、それはすべての非常に迅速に発生し、サーバーが実際にロードされていません。 このスピードと生産性はすぐにサーバーとその逆に、ユーザーからの大量の情報を転送してみましょう。
情報と、この作業を実装するには、いくつかのプログラミング言語の技術があります。 これらは、例えば、からPL / SQLなどが データベース管理システム のInterBaseとFirebirdのシステムでのOracle、PSQLだけでなく、古典的な「maykrosoftovskih»のTransact-SQLを。 それらのすべては、あなたが大規模なデータベースハンドラに、独自のアルゴリズムを使用することができるように、ストアドプロシージャを作成して実行するように設計されています。 それは必要であり、そのような情報の管理を行っている人は、したがって、特定のデータの作成、変更または削除を権限のない第三者からのすべてのオブジェクトを保護し、できることを保証します。
生産性
これらのデータベース・オブジェクトが異なる方法でプログラムすることができます。 これは、時間とエネルギーを節約する、ユーザーが最も適切であろうプロセスの種類を選択することができます。 加えて、手順自体は、このようにサーバとユーザとの間の通信に費やされる膨大な時間を避け、処理されます。 モジュールは再プログラムし、絶対に任意の時間に右方向に変更することができます。 スピードに注目し、特に価値がいるとSQLストアドプロシージャの打ち上げが行われます。このプロセスは、それは便利で汎用性の高い作り、それに似速く、他のです。
安全性
情報処理のこのタイプは、それが強化されたセキュリティを提供するという点で類似のプロセスとは異なります。 これは、アクセスする手順から、他のユーザーが完全に排除することができるという事実によって保証されます。 これは、管理者が傍受やデータベースへの不正アクセスを恐れることなく、独立して、それらと操作を行うことができます。
データ転送
保存されたSQLプロシージャとクライアントアプリケーション間の通信には、パラメータや戻り値を使用することです。 後者は、ストアドプロシージャにデータを送信する必要はないが、(主にユーザの要望に応じて)情報、およびSQLのために処理しました。 一度ストアドプロシージャがその仕事を完了した(必要に応じて、再度、しかし)、それは、例えば、格納されたSQLプロシージャリターンの呼び出しとして実装され得ることによって、様々な方法を使用して呼び出し元のアプリケーションにデータパケットを返信します。
- データ送信 出力パラメータタイプを介し。
- return文を介してデータ伝送。
- キャリアの選択を介してデータ伝送。
そして今、このプロセスは同じ内部をどのように見えるかを見てください。
1. SQLプロシージャにEXEC-保存作成
あなたは、MS SQL(経営管理論スタジオ)でプロシージャを作成することができます。 プロシージャが作成された後、それは手順が作成オペレータによって実行されるプログラム可能なデータベース・ノード上に記載されています。 オブジェクト名を含むEXECプロセスを使用したSQLストアドプロシージャを実行します。
名前を作成するときに最初の手順を来て、その後、彼に割り当てられている1つ以上のパラメータを作りました。 パラメータは省略可能です。 パラメータ(複数可)した後、プロシージャの本体すなわち、いくつかの必要な操作を行う必要がある、書き込まれます。
体がそれにあるローカル変数を持つことができ、これらの変数は、ローカルおよび手続に関連しているという事実。 言い換えれば、彼らは唯一のボディトリートメントの中に考えることができる のMicrosoft SQL Serverの。 この場合、ストアドプロシージャは、ローカルと見なされます。
このように、プロセスを作成するために、我々は、手続き名と手続き体としての少なくとも1つのパラメータを必要とします。 この場合、優れた選択肢は、分類器内のスキーマ名で手順の作成と実装であることに注意してください。
手順本体は、ように、テーブルの1つ以上の行を挿入し、テーブルを作成するデータベースの種類と文字の確立、およびとしては、例えば、オペレータSQLの任意の種類を有することができます。 それにも関わらず、プロシージャ本体は、その中のいくつかの操作を制限します。 最も重要な制限のいくつかを以下に示します。
- ボディは、他のストアドプロシージャを作成しません。
- ボディは、オブジェクトについての誤った印象を作成してはいけません。
- ボディは、任意のトリガを作成しません。
2.プロシージャの本体で変数を設定します
あなたは身体の手順に変数をローカルにすることができ、その後、彼らは、プロシージャ本体内であろう。 良い方法は、ストアドプロシージャ本体の先頭で変数を作成することです。 しかし、あなたはまた、対象の体内のどこに変数を設定することができます。
時には、あなたはいくつかの変数が同じ行に設定し、各変数は、カンマで区切られていることに気づくことがあります。 また、変数は、@が付いていることに注意してください。 プロシージャの本体では、あなたが希望する変数を設定することができます。 たとえば、NAME1 @変数は、プロシージャ本体の端部に向けて発表されることができます。 変数に値を割り当てるために個人データのセットを使用して宣言。 複数の変数は、同じ行に宣言状況とは対照的に、個人データの唯一の一組は、このような状況で使用されます。
「どのように手続きの本体に単一のステートメントで複数の値を割り当てるために「まあ:?ユーザーは、多くの場合、質問をします。 興味深い質問が、これはあなたが思うよりもはるかに簡単です。 答え:«セレクトヴァール=値」のペアなどの助けを借りて。 カンマで区切って、これらのペアを、使用することができます。
3. SQLストアドプロシージャを作成します。
人々の例の多種多様で、簡単なストアドプロシージャを作成表示し、それを実行します。 しかし、手続きは呼び出し元のプロセスは、それはそれ(常にではない)に近い値を持つことになり、このようなパラメータがかかる場合があります。 それらが一致した場合は、本体内の対応するプロセスを開始します。 たとえば、あなたが発信者からの都市や地域を取ると、著者は、対応する都市や地域を参照してくださいどのくらいのデータが返されますプロシージャを作成する場合。 手順は、この計算の作者を行うため、例えば、パブのために、著者のデータベーステーブルを照会します。 これらのデータベースを得るためには、例えば、GoogleはSQL2005ページでSQLスクリプトをダウンロードします。
前の例では、手順が英語で条件付き@stateと@cityと呼ばれることになる2つのパラメータを取ります。 データ・タイプは、アプリケーションで指定されたタイプに対応します。 手順本体は、内部変数の@TotalAuthors(すべての著者)を有し、この変数はその数を表示するために使用されます。 次のセクションの選択要求すべてのカウントが来ます。 最後に、計算された値は、print文を使用して、出力ウィンドウに表示されます。
SQLストアドプロシージャを実行する方法
手順を実行するには、2つの方法があります。 最初の方法は、コンマ区切りのリストは、プロシージャ名の後に行われているようにパラメータを渡すことによって示されています。 我々は(前の例のように)2つの値を持っていると仮定します。 これらの値は、変数と@state @cityの手順を使用して収集されます。 この方法では、送信順序の重要なパラメータ。 このメソッドは、引数の送信シーケンスと呼ばれています。 第2の方法では、パラメータが既に順序は重要ではないである場合には、直接割り当てられます。 この第二の方法は、名前付き引数の伝送として知られています。
手順はやや一般的からずれてもよいです。 以前のすべての例のように、同じですが、パラメータは、ここでしかシフトしています。 すなわち@cityパラメータが最初に格納され、そして@state次のデフォルト値に格納されています。 デフォルトの設定では、通常、個別に割り当てられています。 SQLストアドプロシージャは、などの簡単なパラメータです。 この場合は、オプションCA "「UT「は、デフォルト値を置き換え」提供。 第二の実施形態では、「CA」に一つだけ@cityの引数の値、および@stateオプションのデフォルト値を渡します。 経験豊富なプログラマは、すべてデフォルトの変数は、パラメータリストの末尾に近い位置に配置されていることをお勧めします。 実行が可能ではないそうでなければ、あなたはより長く、より複雑な名前付き引数の転送と仕事をしなければなりません。
4.ストアドプロシージャのSQL Server:返す方法
呼び出されたプロシージャに格納されたデータを送信するための3つの主要な方法があります。 彼らは次のとおりです。
- 戻り値は、ストアドプロシージャ。
- 出力パラメータのストアドプロシージャ。
- ストアドプロシージャのいずれかを選択します。
SQLストアドプロシージャの4.1戻り値
この手順では、手順は、ローカル変数の値を設定し、それを返します。 手順は、直接一定の値を返すことができます。 次の例では、我々はスポンサーの総数を返すプロシージャを作成しました。 私たちは、この前の手順と比較した場合は、印刷の値を逆に置き換えられていることがわかります。
今度はそれを返し、手順を実行して値を表示する方法を見てみましょう。 工程の後に行われる確立するために必要な手順やバリアブル印刷を実行します。 代わりに、オペレータを印刷する、例えば、選択-演算子を使用@RetValueを選択し、OutputValueことができます注意してください。
4.2出力パラメータSQLストアドプロシージャ
応答値は、前の例で見てきた単一の変数を返すために使用することができます。 出力を使用すると、手順が発呼者に1つまたは複数の変数を送信することができます。 プロシージャを作成するときに出力パラメータが時間としてこのキーワード«出力»と表記されます。 パラメータは、出力パラメータとして指定されている場合、手順オブジェクトはそれに値を割り当てる必要があります。 最終的な情報に戻るような場合には、以下見られる例はストアドプロシージャSQL、。
@TotalAuthorsと@TotalNoContract:この例では、2人の週末名が存在します。 これらは、パラメータリストで指定されています。 これらの変数は、プロシージャ本体内の値が割り当てられます。 我々は、出力パラメータを使用すると、呼び出し側は、プロシージャ本体に設定された値を見ることができます。
加えて、前のシナリオでは、2つの変数が出力パラメータとしてストアドプロシージャ、MS SQL Serverをインストールしている値を表示することが宣言されています。 その後、手順は正常値«CA»パラメータを適用することによって実行されます。 以下のパラメータが出力され、従って、変数は所定の方法で渡され宣言しました。 可変出力キーワードもここで指定したときにことに注意してください。 手順が正常に完了した後、出力パラメータを使用して、返される値は、メッセージウィンドウに表示されます。
4.3 SQLストアドプロシージャを選択します
この技術は、ストアドプロシージャを呼び出すためのフォームテーブルデータ値(レコードセット)にセットを返すために使用されます。 この例では、SQLは、このパラメータ@AuthIdによって返されるレコードをフィルタリングすることにより、テーブル「著者」を要求し@AuthIDパラメータを持つストアドプロシージャを。 選択オペレータは、ストアドプロシージャを呼び出すに返されるべきかを決定します。 ストアドプロシージャは、返送AUTHID場合。 このような手順は、1つのレコードのみ、またはまったくなしを返す常にあります。 ただし、ストアドプロシージャは、複数のエントリのリターン上の任意の制限はありません。 しばしば例は、戻りデータが計算された変数とパラメータを使用して、選択した中に見出すことができる合計値を複数設けることによって行われます。
結論
ストアドプロシージャが原因クライアントアプリケーションに必要な変数を設定するだけでなく、返却または移転、かなり深刻なプログラムです。 ストアドプロシージャは、サーバ自体で実行されているので、(いくつかの計算のために)サーバとクライアントアプリケーションとの間の大量のデータ交換を回避することができます。 これはもちろん、彼らの所有者の手で、SQLサーバー、上の負荷を軽減することが可能となります。 亜種の一つは、T SQLストアドプロシージャをされているが、彼らの研究は、印象的なデータベースの作成に関与したものに必要とされています。 ストアドプロシージャの研究に役立つことができニュアンスの大規模な、でも膨大な量は、専門的に含むタイトなプログラミングを、行うことを計画している人のためのこの必要性は、しかし、もあります。
Similar articles
Trending Now