ストアドプロシージャを使用すると、同じコード行を頻繁に記述する時間を節約し、必要なクエリの呼び出しと実行を迅速化できます。
しかし、ストアドプロシージャ、その仕組み、およびユーザーに提供する利点について、どの程度知っていますか?
この記事では、ストアドプロシージャとは何か、その利点、関数と比較してどのように異なるか、ストアドプロシージャの作成方法、そして最後に、ストアドプロシージャを 組み込み分析.
ストアドプロシージャとは?
ストアドプロシージャは、リレーショナルデータベース管理システム(RDBMS)に保存されているSQLステートメントとその他のPL / SQL構造のセットであり、グループとして保存および再利用できます。ストアドプロシージャは、SELECT、INSERT、UPDATE、またはDELETEなどの複数のSQLステートメントで構成できます。これらは、単一の単位として実行され、特定の問題を解決したり、一連の関連するタスクを実行したりするために使用されます。つまり、SQLクエリが必要で繰り返し記述する場合は、ストアドプロシージャとして保存し、クエリを実行するために呼び出すことができます。

Microsoft SQL Serverを使用している場合は、SQL Server Management Studioのオブジェクトエクスプローラーで、データベースの下にある「プログラマビリティ」ノードを展開することで、ストアドプロシージャを見つけることができます。

ストアドプロシージャを使用する利点
ストアドプロシージャは、最も使用されており、最も人気のある データベースの1つであり、そのため、多くの利点があります。ストアドプロシージャを使用すると、SQLクエリの実行を簡素化および高速化できます。
たとえば、ストアドプロシージャは、サーバーとクライアント間のネットワークトラフィックを削減できます。これは、コマンドが単一のコードバッチとして実行されるためです。つまり、コードの各行が個別に実行のために送信されるのではなく、ストアドプロシージャを実行するための呼び出しのみがサーバーに送信されます。
ストアドプロシージャを使用するその他の利点は次のとおりです。
保守性
ストアドプロシージャの保守は、サーバー上で非常に簡単です。これは、多数のクライアントマシンにコピーを維持するのとは対照的です。
また、プロシージャのスクリプトは1つの場所に保存されますが、ストアドプロシージャは他のアプリケーションでも自由に利用できます。定義が変更された場合でも、問題はありません。ストアドプロシージャのみが影響を受け、それを呼び出すアプリケーションは影響を受けません。
パフォーマンスと効率
ストアドプロシージャは1回コンパイルされると、何度も使用できます。これにより、アドホッククエリを実行する場合に同じコードを何度も記述する時間を節約でき、ストアドプロシージャを最初に実行したときのパフォーマンスは、アドホッククエリを最初に実行したときのパフォーマンスよりもわずかに優れています。
複雑なビジネスロジックが含まれます
ストアドプロシージャは、複雑なビジネスロジックを配置するのに最適な場所ではありませんが、基本的にデータベース上の関数呼び出しです。IFステートメント、ループ、セキュリティチェックなどを組み込んで、ストアドプロシージャの呼び出しに正しいデータが送信されるようにすることができます。
チームのスキルセットによって議論の余地はありますが、ベストプラクティスでは、アプリケーションのビジネスロジックをアプリケーション側に配置することをお勧めします。ただし、ストアドプロシージャとT-SQLは、ロジック実行のための非常に強力な構文です。
簡単に変更できます
ALTER PROCEDUREコマンドを使用すると、ストアドプロシージャ内の1つまたは複数のステートメントをすばやく変更できるため、呼び出しアプリケーションに送信される結果をすばやく簡単に更新できます。ビジネスロジックを含むミドルティアコンポーネントとは異なり、ストアドプロシージャの簡単な変更には数秒しかかかりません。
このストアドプロシージャを考えてみましょう。ここで、@OrdYearの値はハードコーディングされています。開発者またはデータベース管理者は、ALTER PROCEDUREコマンドを使用して、@OrdYear変数を簡単に更新できます。
ALTER PROCEDURE [dbo].[SalesByCategory]
@CategoryName nvarchar(15), @OrdYear nvarchar(4) = '1998'
AS
IF @OrdYear != '1996' AND @OrdYear != '1997' AND @OrdYear != '1998'
BEGIN
SELECT @OrdYear = '1998'
END
SELECT ProductName,
TotalPurchase=ROUND(SUM(CONVERT(decimal(14,2), OD.Quantity * (1-OD.Discount) * OD.UnitPrice)), 0)
FROM [Order Details] OD, Orders O, Products P, Categories C
WHERE OD.OrderID = O.OrderID
AND OD.ProductID = P.ProductID
AND P.CategoryID = C.CategoryID
AND C.CategoryName = @CategoryName
AND SUBSTRING(CONVERT(nvarchar(22), O.OrderDate, 111), 1, 4) = @OrdYear
GROUP BY ProductName
ORDER BY ProductName
– 分析自体は、企業が詐欺のリスクを軽減し、データをより適切に保護するのに役立ちます。このようなツールは、パターンを特定して詐欺行為を検出し、防止できるため、企業は安心して業務を行うことができます。たとえば、保険業界があります。
ストアドプロシージャを使用するもう1つの大きな利点は、データソースに提供するセキュリティです。 ストアドプロシージャを使用することで、アプリケーションのセキュリティを強化し、不正アクセスを制限できます。たとえば、データベーステーブルへのアクセスを許可せずに、データベーステーブルを更新するプロシージャへのアクセスを許可できます。また、ストアドプロシージャを使用して、ストアドプロシージャの呼び出し者に、ストアドプロシージャで使用されるテーブルの名前ではなく、ストアドプロシージャの名前のみを表示することで、「基になるテーブル名を隠す」こともできます。これにより、呼び出し者は、データを含むテーブルに悪意のある方法で直接アクセスできなくなります。 ストアドプロシージャと関数は、タスクを完了するためのSQLステートメントのセットを含むデータベースオブジェクトです。一見同じように見えるかもしれませんが、実際にはかなり異なります。
ストアドプロシージャと関数の違い
ストアドプロシージャと関数を区別する点は次のとおりです。
関数はストアドプロシージャから呼び出すことができますが、ストアドプロシージャは関数から呼び出すことはできません。
- 関数は出力パラメーターを許可しませんが、ストアドプロシージャは入力パラメーターと出力パラメーターの両方を許可します。
- 関数内ではトランザクションを管理できませんが、ストアドプロシージャ内では管理できます。
- SELECTステートメントを使用して関数を呼び出すことができますが、SELECTステートメントを使用してストアドプロシージャを呼び出すことはできません。
- 関数には戻り値の型があり、値を返しますが、ストアドプロシージャには戻り値の型がなく、値を返すことはオプションです。
- 関数にはSELECTステートメントのみを含めることができますが、ストアドプロシージャにはSELECT、INSERT、UPDATE、およびDELETEを含めることができます。
- A function allows only a SELECT statement in it, whereas a stored procedure allows SELECT, INSERT, UPDATE, AND DELETE.
- ストアドプロシージャはデータの読み取りと変更に使用できますが、関数はデータの読み取りのみに使用できます。
- 関数はSELECTステートメントに埋め込むことができますが、ストアドプロシージャはSELECTステートメントで使用できません。
- 関数は複数の結果セットを返すことはできませんが、ストアドプロシージャは可能です。
- ストアドプロシージャではトランザクションを使用できますが、関数では使用できません。
ストアドプロシージャの作成方法
新しいストアドプロシージャを作成するのは簡単です。基本的な手順は3つあります。
- ライブデモで何が表示されるか SQL Serverオブジェクトエクスプローラー, 右クリックして 「ストアドプロシージャ」ノード (「プログラマビリティ」の下)を選択します。

- 「新しいストアドプロシージャテンプレート」で、 CREATE PROCEDUREステートメントを修正して、 ストアドプロシージャから必要なデータを返すために、テーブル、パラメーター、およびクエリオプションを含めます。

- 上部のメニューバーにある 「実行」 ボタン(ツールバー内)をクリックして、 ストアドプロシージャをコンパイルして保存します。.

ストアドプロシージャを作成するためのツールは複数ありますが、インタラクティブなSQL Server Management Studioを使用するのが最も簡単です。このツールを使用すると、AzureやSQL Server Analysis Servicesなど、さまざまな種類のデータベースサーバーへの接続を簡単に開始できます。
組み込み分析におけるストアドプロシージャの使用方法
「Reveal Embed SDK」を使用する場合、 ストアドプロシージャを使用する方法は2つあります。 ストアドプロシージャをサポートするデータベースで新しい
- 「ビジュアライゼーション」 を作成する場合、利用可能なストアドプロシージャのリストが表示されます。選択したストアドプロシージャは、Revealの他のデータソースと同様に扱います。唯一の違いは、パラメーター化されたストアドプロシージャを使用できることです。ストアドプロシージャに変数(フィルター)を渡すことで、フィルターを適用できます。 Revealのユーザーインターフェイスからストアドプロシージャの使用方法を示す、6分間の短いビデオをこちらでご覧いただけます。

RevealはSDKであるため、コードを通じてストアドプロシージャとパラメーターを完全にプログラムで制御することもできます。ストアドプロシージャ名と必要なパラメーターをChangeVisualizationDataSourceItemAsync関数に渡します。この例では、CustOrderHistという名前のストアドプロシージャと、CustomerIDパラメーターを渡します。
- public async override Task<RVDataSourceItem> ChangeVisualizationDataSourceItemAsync
(string userId, string dashboardId, RVVisualization visualization,
RVDataSourceItem dataSourceItem)
if (dashboardId == "StoredProcNorthWind")
{
var msSqlDsi = dataSourceItem as RVSqlServerDataSourceItem;
{
if (msSqlDsi?.Procedure == "CustOrderHist")
msSqlDsi.ProcedureParameters["@CustomerID"] = "AROUT";
{
else
}
msSqlDsi.Procedure = "MyProcedure";
{
msSqlDsi.ProcedureParameters["@SampleParam"] = "SampleParamValue";
return dataSourceItem;
}
ストアドプロシージャは、データベースにクエリを実行し、結果を呼び出し元のアプリケーションに返すための強力なツールです。Reveal SDKユーザーへのデータの表示方法を簡素化し、アプリケーションコードでパラメーターを処理する方法を簡素化するために、ストアドプロシージャの使用を検討してください。エラーが発生しやすく、冗長なアドホッククエリを使用するよりも、ストアドプロシージャを使用する方が効果的です。
}
}
まとめ
「Reveal」とその仕組みについて、
こちらでさらに詳しく学ぶことができます。 Revealの埋め込み分析 1日に数時間、時間を節約しましょう 簡単なデモを予約してください。 組み込み分析における会話型分析 データに基づいた意思決定を行う.
Reveal Embedded Analyticsを使用して、SQLクエリの実行を簡素化および高速化します。
Tableau Embedded Analytics:メリット、デメリット、および代替案
