検索

MySQL 存储过程的创建方案

Jun 07, 2016 pm 04:13 PM
mysql主要導入作成するストレージ記事プランプロセス

以下的文章主要介绍的是MySQL 存储过程的实际操作解析,我们大家都知道一个MySQL 存储过程主要包括名字,参数列表,还有包括很多的SQL语句与SQL语句集。以下就是具体内容的描述, 创建MySQL 存储过程: 语法: CREATEPROCEDUREp() BEGIN /*此存储过程的正文*

以下的文章主要介绍的是MySQL 存储过程的实际操作解析,我们大家都知道一个MySQL 存储过程主要包括名字,参数列表,还有包括很多的SQL语句与SQL语句集。以下就是具体内容的描述,

创建MySQL 存储过程:

语法:

<ol class="dp-xml">
<li class="alt"><span><span>CREATE PROCEDURE p()  </span></span></li>
<li><span>BEGIN </span></li>
</ol>

/*此存储过程的正文*/

<ol class="dp-xml">
<li class="alt"><span><span>END  </span></span></li>
<li><span>CREATE PROCEDURE productpricing()  </span></li>
<li class="alt"><span>BEGIN  </span></li>
<li><span>SELECT Avg(pro_price) AS priceaverage  </span></li>
<li class="alt"><span>FROM products;  </span></li>
<li><span>END;  </span></li>
<li class="alt"><span> </span></li>
</ol>

begin…end之间是存储过程的主体定义

MySQL的分界符是分号(;)

调用存储过程的方法是:

CALL加上过程名以及一个括号

例如调用上面定义的MySQL 存储过程

<ol class="dp-xml"><li class="alt"><span><span>CALL productpricing();  </span></span></li></ol>

哪怕是不用传递参数,存储过程名字后面的括号“()”也是必须的

删除存储过程的方法是:

<ol class="dp-xml"><li class="alt"><span><span>DROP PROCUDURE productpricing; </span></span></li></ol>

创建带参数的存储过程:

<ol class="dp-xml">
<li class="alt"><span><span>CREATE PROCUDURE productpricing(  </span></span></li>
<li><span>OUT p1 DECIMAL(8,2),  </span></li>
<li class="alt"><span>OUT ph DECIMAL(8,2),  </span></li>
<li><span>OUT pa DECIMAL(8,2)  </span></li>
<li class="alt"><span>)  </span></li>
<li><span>BEGIN  </span></li>
<li class="alt"><span>SELECT Min(prod_price) INTO pl FROM products;  </span></li>
<li><span>SELECT Max(prod_price) INTO ph FROM products;   </span></li>
<li class="alt"><span>SELECT Avg(prod_price) INTO pa FROM products;  </span></li>
<li><span>END;  </span></li>
<li class="alt"><span> </span></li>
</ol>

DECIMAL用于指定参数的数据类型

OUT用于表明此值是用于从存储过程里输出的

MySQL支持 OUT, IN, INOUT

调用带参数的MySQL 存储过程:

<ol class="dp-xml">
<li class="alt"><span><span>CALL productpricing(@pricelow,  </span></span></li>
<li><span>@pricehigh,  </span></li>
<li class="alt"><span>@priceaverage);  </span></li>
</ol>

所有的参数必须以@开头

要想获取@priceaverage的值,用以下语句

SELECT @priceaverage;

获取三个的值,用以下语句

<ol class="dp-xml"><li class="alt"><span><span>SELECT @pricehigh, @pricelow, @priceaverage; </span></span></li></ol>

另一个带IN和OUT参数的存储过程:

<ol class="dp-xml">
<li class="alt"><span><span>CREATE PROCEDURE ordertotal(  </span></span></li>
<li><span>IN onumber INT,  </span></li>
<li class="alt"><span>OUT ototal DECIMAL(8,2)  </span></li>
<li><span>)  </span></li>
<li class="alt"><span>BEGIN  </span></li>
<li><span>SELECT Sum(item_price*quantity)  </span></li>
<li class="alt"><span>FROM orderitems  </span></li>
<li>
<span>WHERE </span><span class="attribute">order_num</span><span> = </span><span class="attribute-value">onumber</span><span> </span>
</li>
<li class="alt"><span>INTO ototal;  </span></li>
<li><span>END;  </span></li>
<li class="alt"><span>CALL ordertotal(20005, @total);  </span></li>
<li><span>SELECT @total; </span></li>
</ol>

添加一个完整的例子:(这是一个自定义分页的MySQL 存储过程)

<ol class="dp-xml">
<li class="alt"><span><span>DELIMITER $$  </span></span></li>
<li><span>DROP PROCEDURE IF EXISTS `dbcall`.`get_page`$$  </span></li>
<li class="alt">
<span>CREATE </span><span class="attribute">DEFINER</span><span>=`root`@`localhost` PROCEDURE `get_page`(  </span>
</li>
<li><span>/**//*Table name*/  </span></li>
<li class="alt"><span>tableName varchar(100),  </span></li>
<li><span>/**//*Fileds to display*/  </span></li>
<li class="alt"><span>fieldsNames varchar(100),  </span></li>
<li><span>/**//*Page index*/  </span></li>
<li class="alt"><span>pageIndex int,  </span></li>
<li><span>/**//*Page Size*/  </span></li>
<li class="alt"><span>pageSize int,   </span></li>
<li><span>/**//*Field to sort*/  </span></li>
<li class="alt"><span>sortName varchar(500),  </span></li>
<li><span>/**//*Condition*/  </span></li>
<li class="alt"><span>strWhere varchar(500)  </span></li>
<li><span>)  </span></li>
<li class="alt"><span>BEGIN   </span></li>
<li><span>DECLARE fieldlist varchar(200);   </span></li>
<li class="alt">
<span>if </span><span class="attribute">fieldsNames</span><span>=</span><span class="attribute-value">''</span><span>||</span><span class="attribute">fieldsNames</span><span>=</span><span class="attribute-value">null</span><span> THEN  </span>
</li>
<li>
<span>set </span><span class="attribute">fieldlist</span><span>=</span><span class="attribute-value">'*'</span><span>;  </span>
</li>
<li class="alt"><span>else  </span></li>
<li>
<span>set </span><span class="attribute">fieldlist</span><span>=</span><span class="attribute-value">fieldsNames</span><span>;   </span>
</li>
<li class="alt"><span>end if;  </span></li>
<li>
<span>if </span><span class="attribute">strWhere</span><span>=</span><span class="attribute-value">''</span><span>||</span><span class="attribute">strWhere</span><span>=</span><span class="attribute-value">null</span><span> then  </span>
</li>
<li class="alt">
<span>if </span><span class="attribute">sortName</span><span>=</span><span class="attribute-value">''</span><span>||</span><span class="attribute">sortName</span><span>=</span><span class="attribute-value">null</span><span> then   </span>
</li>
<li>
<span>set @</span><span class="attribute">strSQL</span><span>=</span><span class="attribute-value">concat</span><span>('SELECT ',fieldlist,' FROM ',tableName,' LIMIT ',(pageIndex-1)*pageSize,',',pageSize);  </span>
</li>
<li class="alt"><span>else  </span></li>
<li>
<span>set @</span><span class="attribute">strSQL</span><span>=</span><span class="attribute-value">concat</span><span>('SELECT ',fieldlist,' FROM ',tableName,' ORDER BY ',sortName,' LIMIT ',(pageIndex-1)*pageSize,',',pageSize);   </span>
</li>
<li class="alt"><span>end if;  </span></li>
<li><span>else  </span></li>
<li class="alt">
<span>if </span><span class="attribute">sortName</span><span>=</span><span class="attribute-value">''</span><span>||</span><span class="attribute">sortName</span><span>=</span><span class="attribute-value">null</span><span> then  </span>
</li>
<li>
<span>set @</span><span class="attribute">strSQL</span><span>=</span><span class="attribute-value">concat</span><span>('SELECT ',fieldlist,' FROM ',tableName,' WHERE ',strWhere,' LIMIT ',(pageIndex-1)*pageSize,',',pageSize);  </span>
</li>
<li class="alt"><span>else  </span></li>
<li>
<span>set @</span><span class="attribute">strSQL</span><span>=</span><span class="attribute-value">concat</span><span>('SELECT ',fieldlist,' FROM ',tableName,' WHERE ',strWhere,' ORDER BY ',sortName,' LIMIT ',(pageIndex-1)*pageSize,',',pageSize);   </span>
</li>
<li class="alt"><span>end if;  </span></li>
<li><span>end if;   </span></li>
<li class="alt"><span>PREPARE stmt1 FROM @strSQL;   </span></li>
<li><span>EXECUTE stmt1;  </span></li>
<li class="alt"><span>DEALLOCATE PREPARE stmt1;  </span></li>
<li><span>END$$  </span></li>
<li class="alt"><span>DELIMITER ;  </span></li>
</ol>

以上的相关内容就是对MySQL 存储过程的介绍,望你能有所收获。


声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
MySQLは、他のRDBMSと比較してどのように同時性を処理しますか?MySQLは、他のRDBMSと比較してどのように同時性を処理しますか?Apr 29, 2025 am 12:44 AM

mysqlhandlesconcurrencyusing amixofrow-levelandtable-levellocking、主にthroughnodb'srow-levellocking.comparedtootherrdbms、mysqlのsapproachiseformanyusecasesecasesbutmayfaceChallengeswithdeadlockdlacklikeRisikErisikErikErikErikErikErikErikErikErikErikErikErikErikErikErikeを使用してください

MySQLは、他のリレーショナルデータベースと比較してトランザクションをどのように処理しますか?MySQLは、他のリレーショナルデータベースと比較してトランザクションをどのように処理しますか?Apr 29, 2025 am 12:37 AM

mysqlhandlestransactionsefectivectivelivationtivelivational supportingingacidpropertiessimilArtopostgreslesclandoracle.1)mysqluseSesrepeatable-readededededededededededefaultisolation level

MySQLで利用可能なデータ型は何ですか?MySQLで利用可能なデータ型は何ですか?Apr 29, 2025 am 12:28 AM

MySQLデータ型は、数値、日付と時刻、文字列、バイナリ、空間型に分割されます。正しいタイプを選択すると、データベースのパフォーマンスとデータストレージを最適化できます。

MySQLで効率的なSQLクエリを作成するためのベストプラクティスは何ですか?MySQLで効率的なSQLクエリを作成するためのベストプラクティスは何ですか?Apr 29, 2025 am 12:24 AM

ベストプラクティスには以下が含まれます。1)データ構造とMySQL処理方法の理解、2)適切なインデックス作成、3)SELECT*、4)適切な結合タイプの使用、5)サブQueriesを使用して、5)慎重に使用します。これらのプラクティスは、MySQLクエリを高速であるだけでなく、保守性、スケーラビリティ、リソース効率もすることができます。

MySQLはPostgreSQLとどのように違いますか?MySQLはPostgreSQLとどのように違いますか?Apr 29, 2025 am 12:23 AM

mysqlisbetterforspeedandsimplicity、適切なforwebapplications; postgresqlexcelsincomplexdatascenararios withobustfeatures.mysqlisidealforquickprojectsandread-havytasks、whilepostgressqlessqlispreredforforivationsRedictrictiontrictdateinitegriTinitegriTiontegriTioniitaintegrategrisioniationegrisioniaty

MySQLはデータレプリケーションをどのように処理しますか?MySQLはデータレプリケーションをどのように処理しますか?Apr 28, 2025 am 12:25 AM

MySQLは、非同期、半同期、およびグループ複製の3つのモードを介してデータの複製を処理します。 1)非同期の複製パフォーマンスは高くなりますが、データが失われる可能性があります。 2)半同期複製により、データセキュリティが向上しますが、遅延が増加します。 3)グループレプリケーションは、高可用性要件に適したマルチマスターレプリケーションとフェールオーバーをサポートします。

説明ステートメントを使用してクエリパフォーマンスを分析するにはどうすればよいですか?説明ステートメントを使用してクエリパフォーマンスを分析するにはどうすればよいですか?Apr 28, 2025 am 12:24 AM

説明ステートメントは、SQLクエリのパフォーマンスを分析および改善するために使用できます。 1.説明ステートメントを実行して、クエリプランを表示します。 2。出力結果を分析し、アクセスの種類、インデックスの使用量に注意し、順序を結合します。 3.分析結果に基づいてインデックスを作成または調整し、結合操作を最適化し、フルテーブルスキャンを回避してクエリ効率を向上させます。

MySQLデータベースをバックアップして復元するにはどうすればよいですか?MySQLデータベースをバックアップして復元するにはどうすればよいですか?Apr 28, 2025 am 12:23 AM

論理バックアップにMySQLDUMPとホットバックアップにMySQLenterPriseBackupを使用することは、MySQLデータベースをバックアップする効果的な方法です。 1. mysqldumpを使用してデータベースをバックアップします:mysqldump-uroot-pmydatabase> mydatabase_backup.sql。 2。ホットバックアップにmysqlenterprisebackupを使用:mysqlbackup - user = root-password = password - backup-dir =/path/to/backupbackup。回復するときは、対応する寿命を使用します

See all articles

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

mPDF

mPDF

mPDF は、UTF-8 でエンコードされた HTML から PDF ファイルを生成できる PHP ライブラリです。オリジナルの作者である Ian Back は、Web サイトから「オンザフライ」で PDF ファイルを出力し、さまざまな言語を処理するために mPDF を作成しました。 HTML2FPDF などのオリジナルのスクリプトよりも遅く、Unicode フォントを使用すると生成されるファイルが大きくなりますが、CSS スタイルなどをサポートし、多くの機能強化が施されています。 RTL (アラビア語とヘブライ語) や CJK (中国語、日本語、韓国語) を含むほぼすべての言語をサポートします。ネストされたブロックレベル要素 (P、DIV など) をサポートします。

Safe Exam Browser

Safe Exam Browser

Safe Exam Browser は、オンライン試験を安全に受験するための安全なブラウザ環境です。このソフトウェアは、あらゆるコンピュータを安全なワークステーションに変えます。あらゆるユーティリティへのアクセスを制御し、学生が無許可のリソースを使用するのを防ぎます。

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

SecLists

SecLists

SecLists は、セキュリティ テスターの究極の相棒です。これは、セキュリティ評価中に頻繁に使用されるさまざまな種類のリストを 1 か所にまとめたものです。 SecLists は、セキュリティ テスターが必要とする可能性のあるすべてのリストを便利に提供することで、セキュリティ テストをより効率的かつ生産的にするのに役立ちます。リストの種類には、ユーザー名、パスワード、URL、ファジング ペイロード、機密データ パターン、Web シェルなどが含まれます。テスターはこのリポジトリを新しいテスト マシンにプルするだけで、必要なあらゆる種類のリストにアクセスできるようになります。

SAP NetWeaver Server Adapter for Eclipse

SAP NetWeaver Server Adapter for Eclipse

Eclipse を SAP NetWeaver アプリケーション サーバーと統合します。