MySQLでストアドプロシージャを作成するには、 CREATE PROCEDURE
ステートメントを使用します。これを行う方法に関する段階的なガイドを次に示します。
CREATE PROCEDURE
を作成してから、その後の手順の名前が続きます。IN
、 OUT
、またはINOUT
などのモードがあり、各パラメーターにはデータ型が必要です。BEGIN
ブロックとEND
ブロックに囲まれています。このブロック内で、手順が実行されるSQLステートメントを書きます。;
)をステートメントターミネーターとして使用します。ただし、ストアドプロシージャを作成するときは、手順本体で使用されているセミコロンとの競合を避けるために、この区切り文字を一時的に変更する必要があります。通常、 //
または$$
は代替デリミターとして使用されます。簡単なストアドプロシージャを作成する方法の例は次のとおりです。
<code class="sql">DELIMITER // CREATE PROCEDURE GetEmployeeData( IN employeeID INT ) BEGIN SELECT * FROM employees WHERE id = employeeID; END // DELIMITER ;</code>
この例では、 GetEmployeeData
、 employeeID
入力パラメーターとして取得し、従業員のすべてのデータをemployees
テーブルから返す手順です。
MySQLストアドプロシージャには、さまざまなタイプとモードのパラメーターを含めることができます。パラメーターは、3つのモードに分類できます。
IN
パラメーターを使用すると、値を手順に渡すことができます。手順ではこの値を読み取ることができますが、変更することはできません。OUT
パラメーターを使用すると、手順が呼び出し環境に値を返すことができます。手順は、 OUT
パラメーターの値を変更でき、手順の実行後に変更された値にアクセスできます。INOUT
パラメーターは、 IN
およびOUT
のプロパティを組み合わせます。これにより、値を手順に渡すことができ、プロシージャが値を変更し、呼び出し環境に戻すことができます。パラメーターには、 INT
、 VARCHAR
、 DATE
などのデータ型も持つことができ、それらを宣言するときに指定する必要があります。これは、3種類のパラメーターすべてを備えたストアドプロシージャの例です。
<code class="sql">DELIMITER // CREATE PROCEDURE ProcessEmployeeData( IN empID INT, OUT empName VARCHAR(100), INOUT empSalary DECIMAL(10, 2) ) BEGIN SELECT first_name, last_name INTO empName FROM employees WHERE id = empID; UPDATE employees SET salary = empSalary 1000 WHERE id = empID; SELECT salary INTO empSalary FROM employees WHERE id = empID; END // DELIMITER ;</code>
MySQLの既存のストアドプロシージャを変更するには、 ALTER PROCEDURE
ステートメントを使用します。ただし、 ALTER PROCEDURE
、その特性(セキュリティコンテキストやSQLセキュリティなど)など、手順の特定の属性を変更することに限定されています。手順内で実際のコードまたはロジックを変更するには、 DROP PROCEDURE
を使用してCREATE PROCEDURE
必要があります。
これがそれを行う方法です:
<code class="sql">DROP PROCEDURE IF EXISTS ProcedureName;</code>
<code class="sql">DELIMITER // CREATE PROCEDURE ProcedureName( -- Parameters ) BEGIN -- New procedure body END // DELIMITER ;</code>
たとえば、 GetEmployeeData
手順を更新して、従業員の最初と姓のみを返す場合は、次のことを行います。
<code class="sql">DROP PROCEDURE IF EXISTS GetEmployeeData; DELIMITER // CREATE PROCEDURE GetEmployeeData( IN employeeID INT ) BEGIN SELECT first_name, last_name FROM employees WHERE id = employeeID; END // DELIMITER ;</code>
ストアドプロシージャは、MySQLのデータベース管理にいくつかの利点を提供します。
これらの利点を活用することにより、ストアドプロシージャはMySQLのデータベース管理の効率とセキュリティを大幅に向上させることができます。
以上がCreate Procedureステートメントを使用して、MySQLにストアドプロシージャをどのように作成しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。