ストアド・プロシージャの定義と利点

3252 ワード

ストアド・プロシージャの定義と利点
きおくてつづき
sql文を実行するときは、まずコンパイルしてから実行します.ストレージ・プロシージャは、コンパイルされたいくつかのsql文です.アプリケーションが必要なときに直接呼び出せばいいので、効率的です.
ストレージ・プロシージャの説明
ストレージ・プロシージャは、コンパイルおよび最適化された後にデータベース・サーバに格納されるストリーム制御およびSQL文によって記述されるプロシージャであり、アプリケーションが使用される場合は呼び出すだけでよい.ORACLEでは,いくつかの関連プロセスを組み合わせてパッケージを構成することができる.
ストレージ・プロシージャの使用には、次のような利点があります.
*ストレージ・プロシージャの機能により、SQL言語の機能と柔軟性が大幅に向上します.ストレージ・プロシージャは、ストリーム制御文で記述でき、柔軟性が高く、複雑な判断と複雑な演算を完了できます.
*データのセキュリティと完全性を保証します.
#ストレージ・プロシージャを使用すると、権限のないユーザーが制御下でデータベースに間接的にアクセスでき、データのセキュリティが保証されます.
#ストレージ・プロシージャを使用すると、関連するアクションを一緒に実行でき、データベースの整合性を維持できます.
*ストレージ・プロシージャを再実行する前に、データベースは構文解析と構文解析を行い、最適化された実行スキームを示しました.このようなコンパイル済みプロセスは、SQL文のパフォーマンスを大幅に改善します.SQL文を実行する作業の大部分が完了したため、ストレージ・プロシージャは非常に高速で実行できます.
*ネットワークの通信量を削減できます.
*次のように、エンタープライズ・ルールを表す演算プログラムをデータベース・サーバに配置します.
#集中制御.
#エンタープライズ・ルールが変更された場合、サーバでストレージ・プロシージャを変更すれば、アプリケーションを変更する必要はありません.エンタープライズ・ルールの特徴は、常に変化することです.エンタープライズ・ルールを表す演算プログラムをアプリケーションに入れると、エンタープライズ・ルールが変化すると、アプリケーションの変更作業量が非常に大きくなります(アプリケーションの修正、発行、インストール).エンタープライズ・ルールを表す演算をストレージ・プロシージャに挿入すると、エンタープライズ・ルールが変更された場合、ストレージ・プロシージャを変更すればよいので、アプリケーションは変更する必要はありません.
データベース・ストレージ・プロシージャの本質は、データベース側に配置された定義コードのセットとSQLです.
SQLの言語を使用して、データベース・アクセスのストアド・プロシージャを記述します.構文は次のとおりです.
CREATE PROC[EDURE] procedure_name [;number] 
[ 
{@parameter data_type} ][VARYING] [= default] [OUTPUT] 
] 
[,...n] 
[WITH 
{ 
RECOMPILE 
| ENCRYPTION 
| RECOMPILE, ENCRYPTION 
} 
] 
[FOR REPLICATION] 
AS 
sql_statement [...n]

[]内のコンテンツはオプションであり、()内のコンテンツは必須です.
例:ユーザがテーブルtmpのレコードを削除するストアド・プロシージャSelect_を作成したい場合deleteは次のように書くことができます.
Create Proc select_del As 
Delete tmp 

例:ユーザがtmpテーブルのある年のデータをクエリーしたいストレージプロセス
create proc select_query @year int as 
select * from tmp where year=@year

ここで@yearはストアド・プロシージャのパラメータです
例:このストレージ・プロシージャは、あるノードnから最上位層の父親ノードを見つけ、このようなよく使われるプロシージャはストレージ・プロシージャが担当し、Webページで共有に達するように繰り返し使用することができる.
空:ノードが最上位ノードであることを示します
fjdid(親ノード番号)
ノードn非空:そのノードを表す父親のノード番号
dwmc(単位名)
CREATE proc search_dwmc @dwidold int,@dwmcresult varchar(100) output 
as 
declare @stop int 
declare @result varchar(80) 
declare @dwmc varchar(80) 
declare @dwid int 
set nocount on 
set @stop=1 
set @dwmc="" 
select @dwmc=dwmc,@dwid=convert(int,fjdid) from jtdw where id=@dwidold 
set @result=rtrim(@dwmc) 
if @dwid=0 
set @stop=0 
while (@stop=1) and (@dwid<>0) 
begin 
set @dwidold=@dwid 
select @dwmc=dwmc,@dwid=convert(int,fjdid) from jtdw where id=@dwidold 
if @@rowcount=0 
set @dwmc="" 
else 
set @result=@dwmc+@result 
if (@dwid=0) or (@@rowcount=0) 
set @stop=0 
else 
continue 
end 
set @dwmcresult=rtrim(@result) 

  exec pro-name  [pram1 pram2.....]

まとめ:第一に、ストレージ・プロシージャはSQL文がプリコーディングされているため、実行速度が速い.第二に、ストレージ・プロシージャは、パラメータ、出力パラメータ、単一または複数の結果セット、および戻り値を受け入れることができる.エラーの原因をプログラムに返すことができます.第三に、ストレージ・プロシージャは比較的安定して動作し、多くのエラーは発生しません.一度成功すれば、後でこのプログラムで実行します.第四に、ストレージプロセスは主にサーバ上で実行され、クライアントに対する圧力を減らす.第五に、ストレージ・プロシージャには、プログラム・フロー、論理、およびデータベースへのクエリーが含まれます.データロジックをカプセル化して非表示にすることもできます.6.ストアド・プロシージャは、単一のストアド・プロシージャで一連のSQL文を実行できます.第七に、ストレージ・プロシージャは、独自のストレージ・プロシージャから他のストレージ・プロシージャを参照することができ、一連の複雑な文を簡略化することができます.