Scriptly Helps Pharmacies Identify Trends in Real Time with Reveal
ストアドプロシージャとは何か、その利点、関数と比較してどのように異なるか、作成方法、そして組み込み分析でストアドプロシージャをどのように使用するかを学びます。
Executive Summary:
ストアドプロシージャを使用することは、同じコード行を頻繁に記述する手間を省き、目的のクエリの呼び出しと実行を迅速化する簡単な方法です。
しかし、ストアドプロシージャとは何か、どのように機能するのか、そしてユーザーにどのような利点を提供するのかをご存知でしょうか?
この記事では、ストアドプロシージャとは何か、その利点、関数と比較してどのように異なるのか、ストアドプロシージャの作成方法、そして最後に、組み込み分析でストアドプロシージャをどのように使用するかを学びます。
ストアドプロシージャは、SQLステートメントとその他のPL/SQLコンストラクトのセットであり、リレーショナルデータベース管理システム(RDBMS)にグループとして保存され、繰り返し再利用できるものです。ストアドプロシージャは、SELECT、INSERT、UPDATE、またはDELETEのような複数のSQLステートメントで構成される場合があります。これらは一つのユニットとして実行され、特定の問題を解決したり、一連の関連タスクを実行したりするために使用されます。つまり、SQLクエリが必要で、それを繰り返し記述する必要がある場合、それをストアドプロシージャとして保存し、その後呼び出してクエリを実行することができます。

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

ストアドプロシージャは、最も使用され、人気のあるデータベースのトピックの一つであり、そのため、いくつかの利点を提供します。ストアドプロシージャを使用することで、SQLクエリの実行を簡素化し、加速させることができます。
例えば、ストアドプロシージャを保存することで、サーバーとクライアント間のネットワークトラフィックを削減できます。これは、コマンドが単一のコードバッチとして実行されるためです。つまり、コードのすべての行が個別に実行のために送信されるのではなく、ストアドプロシージャを実行するための呼び出しのみがサーバーに送信されます。
ストアドプロシージャを使用するその他の利点は以下の通りです。
ストアドプロシージャのメンテナンスは、多数のクライアントマシン上のコピーを維持するのと対照的に、サーバー上では非常に簡単です。
また、プロシージャのスクリプトは単一の場所に保存されますが、ストアドプロシージャは他のアプリケーションでも自由に利用できます。定義が変更された場合でも、それは全く問題ありません。なぜなら、影響を受けるのはストアドプロシージャのみであり、それを呼び出すアプリケーションではありません。
ストアドプロシージャは一度コンパイルされるだけで、何度も使用できます。アドホッククエリを実行する場合、同じものを複数回記述する時間を大幅に節約でき、ストアドプロシージャの最初の実行とアドホッククエリの最初の実行の間でわずかなパフォーマンス上の優位性をもたらします。
複雑なビジネスロジックを配置する場所としては最適ではありませんが、ストアドプロシージャは基本的にデータベース上での関数呼び出しです。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
ストアドプロシージャを使用するもう一つの大きな利点は、データソースに提供するセキュリティです。ストアドプロシージャを使用して、不正なアクセスを制限することで、アプリケーションのセキュリティを強化することができます。例えば、テーブル自体へのアクセスを許可せずに、データベーステーブルを更新するプロシージャへのアクセスを許可することができます。また、ストアドプロシージャを使用して、エンドユーザーから基となるテーブル名を「隠す」こともできます。ストアドプロシージャの呼び出し元は、ストアドプロシージャで使用されるテーブル名ではなく、ストアドプロシージャの名前のみを持っているため、悪意のある方法でデータを含むテーブルに直接アクセスすることはできません。
ストアドプロシージャと関数は、タスクを完了するためのSQLステートメントのセットを含むデータベースオブジェクトです。一見すると同じように見えるかもしれませんが、実際には大きく異なります。
ストアドプロシージャと関数を区別する点は以下の通りです。
新しいストアドプロシージャの作成は簡単です。基本的な手順は3つあります。



ストアドプロシージャを作成するためのツールは複数ありますが、AzureやSQL Server Analysis Servicesを含む、さまざまな種類のデータベースサーバーに接続を開始するための簡単な方法を提供する、対話型のSQL Server Management Studioを使用するのが最も簡単です。
Reveal Embed SDKを使用する場合、ストアドプロシージャを使用する方法は2通りあります。

Revealのユーザーインターフェースからストアドプロシージャの使用方法に関する簡単な6分間のビデオをこちらでご覧いただけます。
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組み込み分析について、およびそれがどのように機能するかについて、SDKをダウンロードするか、簡単なデモをスケジュールすることで、さらに学ぶことができます。
1日あたりの時間をより多く解放する
Reveal組み込み分析でSQLクエリの実行を簡素化し、加速させます