ストアドプロシージャ SAP HANA(SQLチュートリアル)
⚡ スマートサマリー
SAP HANA SQLストアドプロシージャは、特定のデータ操作を実行する、再利用可能な名前付きSQLScriptブロックです。IN、OUT、INOUTパラメータを受け入れ、READS SQL DATAを使用して読み取り専用としてマークすることができ、CREATE PROCEDURE構文を使用してスキーマレベルまたはパッケージレベルで作成されます。

SQLストアドプロシージャとは何ですか?
A ストアドプロシージャ は、特定のタスクを実行する名前付きで再利用可能なコード単位です。プロシージャは、より大きなプログラムに構成することができ、これが の基礎となります。 モジュラーデザインある手続きが別の手続きを呼び出すことができる。呼び出し元は、 呼び出しプログラム.
プロシージャは、定義された一連のデータ変換を行う再利用可能な処理ブロックです。複数の入力パラメータと出力パラメータを受け入れることができ、読み取り専用または読み書き可能として宣言できます。
- スキーマレベル (カタログノード)—カタログを通じて管理され、適切な権限を持つすべてのコンシューマーから閲覧可能です。
- パッケージレベル (コンテンツノード)— アプリケーションパッケージ内の設計時成果物として管理されます。
SAP HANAストアドプロシージャ構文
プロシージャを作成するための一般的な構文 SAP HANAを以下に示します。
CREATE PROCEDURE <proc_name> [(<parameter_clause>)] [LANGUAGE <lang>]
[SQL SECURITY <mode>] [DEFAULT SCHEMA <default_schema_name>]
[READS SQL DATA [WITH RESULT VIEW <view_name>]] AS
{ BEGIN [SEQUENTIAL EXECUTION]
<procedure_body>
END
| HEADER ONLY }
その CREATE PROCEDURE ステートメントは、指定されたプログラミング言語を使用してプロシージャを作成します。 <lang>デフォルトの言語はSQLScriptです。
構文要素の説明
以下の表は、CREATE PROCEDURE構文で使用されるすべての句について説明しています。
| 素子 | 詳細説明 |
|---|---|
<proc_name> |
手順の名称。 |
<parameter_clause> |
パラメータの一覧。各パラメータはIN、OUT、またはINOUTと表記されます。 • IN — プロシージャに渡される読み取り専用の入力。 • OUT — プロシージャから返される出力。 • 入力 ― 値を入力として渡し、変更後の値を返す。 |
LANGUAGE <lang> |
プロシージャで使用されるプログラミング言語。デフォルト:SQLSCRIPT。 |
SQL SECURITY <mode> |
セキュリティモード(デフォルト:DEFINER): • 定義者 — プロシージャの作成者の権限で実行されます。 • 呼び出し元 — 呼び出し元の権限で実行されます。 |
DEFAULT SCHEMA <default_schema_name> |
プロシージャ本体内の修飾されていないオブジェクトを解決するために使用されるスキーマ。省略した場合、現在のセッションスキーマが使用されます。 |
READS SQL DATA |
このプロシージャを読み取り専用としてマークします。データやスキーマを変更することはできず、DDLやDMLを含まず、他の読み取り専用プロシージャを呼び出すことのみ可能です。 |
WITH RESULT VIEW <view_name> |
プロシージャの出力として使用される結果ビューを定義します。結果ビューが存在する場合、プロシージャは別のプロシージャからクエリできます。 SQL まるでテーブルやビューであるかのようにステートメントを扱います。 |
SEQUENTIAL EXECUTION |
プロシージャ本体を並列処理なしで順次実行するように強制します。 |
<procedure_body> |
選択したプログラミング言語で記述された、手順の本体部分。 |
HEADER ONLY |
プロシージャ本体をコンパイルせずに、OIDを持つプロシージャのプロパティのみを作成します。前方宣言に便利です。 |
例:シンプルなストアドプロシージャを作成する
以下の例では、指定された顧客の売上合計を返す読み取り専用のプロシージャを作成します。
CREATE PROCEDURE GET_CUSTOMER_SALES (
IN iv_customer_id NVARCHAR(10),
OUT ev_total DECIMAL(15,2)
)
LANGUAGE SQLSCRIPT
SQL SECURITY INVOKER
READS SQL DATA AS
BEGIN
SELECT SUM(NET_VALUE) INTO ev_total
FROM "SALES"."ORDERS"
WHERE CUSTOMER_ID = :iv_customer_id;
END;
プロシージャを呼び出すには、以下を使用します。
CALL GET_CUSTOMER_SALES ('C0001', ?);
SAP HANA Studio(または任意のJDBC/ODBCクライアント)は、以下の値を返します。 ev_total 出力パラメータにおいて。
ストアドプロシージャの呼び出し
ストアドプロシージャが作成されると、 CALL ステートメントは、オプションで別のプロシージャ、SQLScript関数、または外部クライアント内で使用できます。最も一般的な呼び出しパターンは次の4つです。
- SQLから:
CALL my_proc(p1, p2, ?);— プレースホルダーはOUT値を返します。 - 別の手順から:
CALL another_proc(:in1, :out1); - アプリケーションから: JDBC、ODBC、またはCloud SDKを介して入力パラメータをバインドし、出力を読み取ります。
- 仮想テーブルとして: 結果ビューが宣言されている場合は、ビュー名に対してSELECT文を使用してプロシージャを照会します。
HANAストアドプロシージャのベストプラクティス
以下の習慣を実践することで、HANAのプロシージャは読みやすく、パフォーマンスが高く、保守しやすいものになります。
- 接頭辞付きのパラメータ名:
iv_入力用、ev_輸出用、iov_入出力用。 - READS SQL DATA で意図をマークする 手順が完全に読み取り専用である場合。
- SQL SECURITY INVOKER を使用する 呼び出し元の権限を尊重すべき共有プロシージャの場合。
- 各ブロックをBEGIN/ENDで囲む そして、本体は短く保ち、複雑なロジックはヘルパープロシージャに分割する。
- 例外処理: つかいます
DECLARE EXIT HANDLER適切なエラー報告のために。 - SELECT * を避ける 内部手順では、計画の安定性を保つために、実際に必要な列に名前を付けてください。
