クラスの Java メソッドにアクセスするには、クラスのメソッドのラッパーとして動作するストアドプロシージャまたはファンクションを作成します。
前提条件
レッスン 4 を試みる前に、レッスン 1、2、3 のステップを完了します。
このレッスンでは、このチュートリアルの開始時に、権限のセクションで一覧されているロールと権限を持っていることを前提としています。 チュートリアル:データベース内の Java の使用
内容と備考
Invoice 例からのコンパイル済みメソッドを含む Java クラスファイルがデータベースにロードされました。
サンプルクラスの Invoice.main メソッドを呼び出す次の SQL ストアドプロシージャを作成します。
CREATE PROCEDURE InvoiceMain( IN arg1 CHAR(50) ) EXTERNAL NAME 'Invoice.main([Ljava/lang/String;)V' LANGUAGE JAVA; |
このストアドプロシージャは、Java メソッドのラッパーとして動作します。
ストアドプロシージャを呼び出して、Java メソッドを呼び出します。
CALL InvoiceMain('to you'); |
データベースサーバメッセージログに "Hello to you" というメッセージが表示されるのを確認できます。データベースサーバによって、System.out から出力データがリダイレクトされています。
次のストアドプロシージャは、Invoice クラスの Java メソッドに引数を渡して、戻り値を取得する方法について説明します。Java ソースコードを確認すると、Invoice クラスの init
メソッドは文字列引数と double 引数の両方を取ることがわかります。文字列引数は Ljava/lang/String;
を使用して指定されます。double 引数は D
を使用して指定されます。メソッドは void を返し、これは V
を使用して右側のカッコの後ろに指定されます。
CREATE PROCEDURE init( IN arg1 CHAR(50), IN arg2 DOUBLE, IN arg3 CHAR(50), IN arg4 DOUBLE) EXTERNAL NAME 'Invoice.init(Ljava/lang/String;DLjava/lang/String;D)V' LANGUAGE JAVA; |
次の関数は引数をとらない Java メソッドを呼び出し、double (D
) または文字列 (Ljava/lang/String;
) を返します。
CREATE FUNCTION rateOfTaxation() RETURNS DOUBLE EXTERNAL NAME 'Invoice.rateOfTaxation()D' LANGUAGE JAVA; CREATE FUNCTION totalSum() RETURNS DOUBLE EXTERNAL NAME 'Invoice.totalSum()D' LANGUAGE JAVA; CREATE FUNCTION getLineItem1Description() RETURNS CHAR(50) EXTERNAL NAME 'Invoice.getLineItem1Description()Ljava/lang/String;' LANGUAGE JAVA; CREATE FUNCTION getLineItem1Cost() RETURNS DOUBLE EXTERNAL NAME 'Invoice.getLineItem1Cost()D' LANGUAGE JAVA; CREATE FUNCTION getLineItem2Description() RETURNS CHAR(50) EXTERNAL NAME 'Invoice.getLineItem2Description()Ljava/lang/String;' LANGUAGE JAVA; CREATE FUNCTION getLineItem2Cost() RETURNS DOUBLE EXTERNAL NAME 'Invoice.getLineItem2Cost()D' LANGUAGE JAVA; |
次は、Invoice クラスの init
メソッドのラッパーとして動作するストアドプロシージャに対するサンプルコールについて説明します。
CALL init('Shirt',10.00,'Jacket',25.00); |
次の SELECT 文は、Invoice クラスの他のメソッドをいくつか呼び出します。
SELECT getLineItem1Description() as Item1, getLineItem1Cost() as Item1Cost, getLineItem2Description() as Item2, getLineItem2Cost() as Item2Cost, rateOfTaxation() as TaxRate, totalSum() as Cost; |
SELECT 文が 6 つのカラムを返す場合。
Item1 | Item1Cost | Item2 | Item2Cost | TaxRate | Cost |
---|---|---|---|---|---|
Shirt | 10 | Jacket | 25 | 0.15 | 40.25 |
![]() |
DocCommentXchange で意見交換できます
|
Copyright © 2013, SAP AG or an SAP affiliate company. - SAP Sybase SQL Anywhere 16.0 |