ホームページ  >  記事  >  データベース  >  データベースストアドプロシージャの書き方

データベースストアドプロシージャの書き方

angryTom
angryTomオリジナル
2019-08-21 13:16:2113869ブラウズ

データベースストアドプロシージャの書き方

SQL ステートメントは最初にコンパイルしてから実行する必要があり、ストアド プロシージャ (ストアド プロシージャ) は特定の機能を完了するための一連の SQL ステートメントであり、コンパイルされてデータベースに保存されます。ユーザーは、名前と指定されたパラメーターを使用してストアド プロシージャを呼び出すことを指定します (ストアド プロシージャにパラメーターがある場合)。ストアド プロシージャは、データベースに作成および保存されるプログラム可能な関数であり、SQL ステートメントと制御構造で構成できます。ストアド プロシージャは、異なるアプリケーションやプラットフォームで同じ機能を実行する場合、または特定の機能をカプセル化する場合に便利です。データベース内のストアド プロシージャは、プログラミングにおけるオブジェクト指向アプローチのシミュレーションとみなすことができ、これによりデータへのアクセス方法を制御できます。

推奨コース: MySql チュートリアル

ストアド プロシージャの利点:

(1). SQL 言語の機能と柔軟性の強化: ストアド プロシージャを制御文で記述できる, 柔軟性が高く、複雑な判断やより複雑な操作を完了することができます。

(2). 標準コンポーネントプログラミング: ストアドプロシージャを作成した後は、ストアドプロシージャの SQL ステートメントを書き直すことなく、プログラム内で複数回呼び出すことができます。また、データベースの専門家は、アプリケーションのソース コードに影響を与えることなく、いつでもストアド プロシージャを変更できます。

(3). 実行速度の高速化: 操作に大量の Transaction-SQL コードが含まれている場合、または複数回実行される場合、ストアド プロシージャはバッチ処理よりもはるかに高速に実行されます。ストアド プロシージャはプリコンパイルされているためです。ストアド プロシージャが初めて実行されるとき、オプティマイザによってクエリが分析および最適化され、最終的に実行プランがシステム テーブルに保存されます。バッチ Transaction-SQL ステートメントは、実行するたびにコンパイルして最適化する必要があり、速度は比較的遅くなります。

(4). ネットワーク トラフィックの削減: 同じデータベース オブジェクトに対する操作 (クエリ、変更など) の場合、この操作に含まれる Transaction-SQL ステートメントがストアド プロシージャに編成されている場合、操作がストアド プロシージャが呼び出されるとき、呼び出しステートメントのみがネットワーク経由で送信されるため、ネットワーク トラフィックが大幅に削減され、ネットワーク負荷が軽減されます。

(5). セキュリティ機構として活用する:特定のストアドプロシージャの実行権限を制限することで、該当するデータへのアクセス権限を制限し、権限のないユーザーによるアクセスを回避することができます。データにアクセスし、データのセキュリティを確保します。

MySQL のストアド プロシージャ

ストアド プロシージャはデータベースの重要な機能です。MySQL 5.0 は以前はストアド プロシージャをサポートしていなかったので、MySQL のアプリケーションが大幅に減少しました。幸いなことに、MySQL 5.0 ではストアド プロシージャのサポートが開始されており、データベースの処理速度が大幅に向上し、データベース プログラミングの柔軟性も向上します。

MySQL ストアド プロシージャの作成

構文

CREATE PROCEDURE  过程名([[IN|OUT|INOUT] 参数名 数据类型[,[IN|OUT|INOUT] 参数名 数据类型…]]) [特性 ...] 过程体
DELIMITER //  
  CREATE PROCEDURE myproc(OUT s int)    
    BEGIN     
     SELECT COUNT(*) INTO s FROM students;    
    END    
    //
DELIMITER ;

デリミタ

# # MySQL はデフォルトで区切り文字として「;」を使用します。区切り文字が宣言されていない場合、コンパイラはストアド プロシージャを SQL ステートメントとして扱い、コンパイル プロセスでエラーが報告されるため、「DELIMITER //」を使用して宣言する必要があります。これにより、コンパイラは 2 つの「//」の間の内容をストアド プロシージャのコードとみなして、これらのコードを実行しなくなります。「DELIMITER;」は区切り文字を復元することを意味します。

パラメータ

ストアド プロシージャには、必要に応じて入力、出力、入力および出力パラメータを含めることができます。複数のパラメータがある場合は、「,」を使用して区切ります。 MySQL ストアド プロシージャのパラメータは、ストアド プロシージャの定義で使用されます。パラメータ タイプには、IN、OUT、INOUT:

の 3 種類があります。ストアド プロシージャを呼び出すときに、IN パラメータの値を指定する必要があります。ストアド プロシージャ内のパラメータです。値は返せず、デフォルト値です。 OUT: ストアド プロシージャ内で値を変更でき、返すことができます。 INOUT: 呼び出し時に指定され、変更して返すことができます。

プロシージャ本体

プロセス本体の開始と終了は、BEGIN と END でマークされます。

まとめ

今回は主にストアドプロシージャの使い方をマスターしましたが、一般にストアドプロシージャは実はCの関数に似ています。この関数は、この処理を作成するファイル内で呼び出す必要がありますが、ストアド プロシージャの場合は、この操作プロセスをデータベースに格納するのと同等であり、call を使用して呼び出し、一部のパラメータと結果を入力または出力することができます。

最も印象的なのは、「in n int」や「out sum int」といった入出力の定義ですが、関連ブログを見ると、入出力定義の使用規則をまとめると次のようになります。

MySQL ストアド プロシージャのパラメータはストアド プロシージャの定義で使用され、パラメータの種類は

IN、OUT、INOUT の 3 つです。形式は次のとおりです。 function([[IN |OUT | INOUT ] パラメータ名のデータ型...])

IN 入力パラメータ
ストアド プロシージャを呼び出すときにこのパラメータの値を指定する必要があることを示します。ストアド プロシージャの実行中にこのパラメータの値が変更された場合、その値を返すことはできず、デフォルト値

OUT 出力パラメータ
この値はストアド プロシージャ内で変更でき、返すことができます。

INOUT 入力および出力パラメータ
この値は呼び出し時に指定でき、返せる 変更されて返される

IN と OUT は実験で経験しており、主に INOUT の理解に役立ちます。 ##パラメータinoutの使用例(値の入力と値の渡しの両方が可能)

ステートメント関数:年齢を渡し、年齢を自動的に10歳ずつ増やす

プロシージャp3(inout age int)を作成
begin
set age:=age 10;
end
その中で: 呼び出すとき、inout パラメーターの値は入力型と出力型の両方です。それに値を与えます。値は変数ではありません。 , そのため、最初に変数を設定して値を初期化する必要があります。呼び出し時にこれを直接渡します。変数だけです。
set @currentAge=8$
call p3(@currentAge)$
select @currentAge$
ストアド プロシージャを作成して実行した後の実行結果は次のとおりです。

以上がデータベースストアドプロシージャの書き方の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。