PEXA Modelについて
チュートリアル
定義ファイル
機能一覧
リファレンス
|
SQLユーザ関数の利用について
|
単純サーチで、カラム名にSQLユーザ関数(SQL function)を使用することができます。
Model定義では通常現象型名とカラム名をcolumnセクションで記述します
これを現象型名とSQLユーザ関数名+パラメータ(必要な時のみ)として記述します。
ReminderAlertCount "func100(UNDO_PTYPE_NO)" func100がSQLユーザー関数定義になります。
SQLユーザ関数のパラメータとして、同一DBテーブルのカラムを指定することが出来ます。
サーチ時の取得現象型のほか、検索項目の現象型としても指定することが出来ます。
サービスでは特に意識する必要はありません。
DB内のテーブルから情報を取れるものは、Model定義のプロセジャーセクションではなく、SQLユーザ関数に置き換えることが可能となります。
よって、プロセジャーの検索項目はextra_filterに指定する必要がありましたが、該当機能を使用するモデル内の現象型はfilterで指定することができ、APサーバーの負荷を低減することが可能です。(DBサーバーの負荷は上がります)
SQLユーザ関数を定義したモデル現象型は書込みはできません。
SQLユーザ関数は事前にDBに登録してから実行してください。
|
|
ユーザ関数Model定義の記述方法
|
Model定義のloadセクションで以下のようにSQLユーザ関数を指定します。
記述例:ReminderAlertCount部分がSQLユーザー関数
LastUpdator LAST_UPDATOR
LastUpdateDatetime LAST_UPDATE_DATETIME
ReminderAlertCount "func100(UNDO_PTYPE_NO)";この部分がSQLユーザー関数定義になります。
Remover REMOVER
SQLユーザ関数は事前にDBに登録してから実行してください。
loadセクションのみに記述し、save/createセクションには記述しないでください。
SQLユーザ関数には()があるので、SQLユーザ関数はダブルコーテーション“で囲んで記述する必要があります。
|
|
DBベンダにおけるユーザ関数の対応
|
SQLユーザ関数の作成・文法はDBベンダごとに異なります。
Oracleでのユーザ関数の対応
|
Oracleを基準としています。
記述例:
CREATE OR REPLACE FUNCTION FUNC100(UNDONO IN INT) RETURN INT AS
RCOUNT INT;
BEGIN
SELECT COUNT(*) INTO RCOUNT
FROM UNDO_PTYPE_DETAIL_MODEL
WHERE UNDO_PTYPE_NO = UNDONO
AND REMOVED_FLAG = 0;
RETURN (RCOUNT);
END FUNC100;
|
|
PostgreSQLでのユーザ関数の対応
|
OracleとはRETURNS句が違います。
DECLARE句を指定する必要があります。
記述例:
CREATE OR REPLACE FUNCTION FUNC100(UNDONO IN INT) RETURNS INT AS $FUNC$
DECLARE
RCOUNT INT;
BEGIN
SELECT COUNT(*) INTO RCOUNT
FROM UNDO_PTYPE_DETAIL_MODEL
WHERE UNDO_PTYPE_NO = UNDONO
AND REMOVED_FLAG = 0;
RETURN RCOUNT;
END ;
$FUNC$ LANGUAGE plpgsql;
$FUNC$から$FUNC$までがユーザ関数の内容
言語としてPL/PGSQLが登録している必要があります。
CREATE LANGUAGE plpgsql;
|
|
MySQLでのユーザ関数の対応
|
文法はPostgreSQLと同じですが、ユーザ関数を登録する方法が違います。
記述例:ソースのユーザ関数削除を含むSQL文
DROP FUNCTION IF EXISTS FUNC100;
delimiter //
CREATE FUNCTION FUNC100(UNDONO INT) RETURNS INT
BEGIN
DECLARE RCOUNT INT;
SELECT COUNT(*) INTO RCOUNT
FROM UNDO_PTYPE_DETAIL_MODEL
WHERE UNDO_PTYPE_NO = UNDONO
AND REMOVED_FLAG = 0;
RETURN RCOUNT;
END;
//
ユーザ関数SQL定義の終了を示すために
delimiter //
を指定し、最後のEND;の後に
//
を記述する必要があります。
|
|
|
|
SQLストアードプロセジャの利用について
|
DBストアードプロセジャをモデルとして定義し実行します。
モデルに対するcreate時のみストアードプロセジャを実行します。
サービスにおいてはmappingプロセスでcommit trueのときに動作します。
(Copy
format_type mapping
(mapping
create force
commit true
(@DA:XTestProc
UndoPtypeID "FFFFF"
RemovedDatetime @NOW
)
)
)
save時、load時は例外を発生するので、実行しないでください。
サービスにおいてはsearchプロセスとして実行は出来ません。
PEXAではテーブル情報のチェック時にテーブルとして登録されていない時は、DBストアードプロセジャではないかと
チェックするようなロジックになっていますので、テーブル名と同じストアードプロセジャ名は使用できません。
SQLストアードプロセジャは事前にDBに登録してから実行してください。
|
|
SQLストアードプロセジャModel定義の記述方法
|
一般のモデルと同じような振る舞いをするので、Primaryセクションにプロキシーを指定する必要があります。
よって、カラムセクションにも指定プロキシーをセットします。
ということは、DBストアードプロセジャのパラメータには、指定プロキシーを指定する必要があります。
このモデルで検索は出来ませんが、createセクションのみではなく、loadセクションも記述する必要があります。
テーブル句がストアードプロセジャ名になります。
createセクションがストアードプロセジャのパラメータの情報となります。
context_default true
check_value false
pool_name java:comp/env/jdbc/pexaPool
resource XTestProc
(schema
table STEST001
(primary
column A1
phenomenon_type UndoPtypeModelNo
)
(column
(load
UndoPtypeModelNo A1
UndoPtypeID C1
ValidityFlag VALIDITY_FLAG
RemovedFlag REMOVED_FLAG
VersionNumber VERSION_NUMBER
RemovedDatetime REMOVE_DATETIME
)
(create
UndoPtypeModelNo A1
UndoPtypeID C1
ValidityFlag VALIDITY_FLAG
RemovedFlag REMOVED_FLAG
VersionNumber VERSION_NUMBER
RemovedDatetime REMOVE_DATETIME
)
(save
)
(remove
)
(delete
)
)
)
(procedure
)
(static
VersionNumber 1
ValidityFlag VALID
RemovedFlag NOT_REMOVED
EntityName XTestProc
)
|
|
ストアードプロセジャ作成注意点
|
ストアードプロセジャではパラメータにINOUTを指定できるが、PEXAではINのみをサポートしています。
PEXA側からストアードプロセジャに対するデータセットのみです。
ストアードプロセジャでOUTの指定をしても、PEXA側に値を渡す機能はありません。
ストアードプロセジャがストアードファンクション(OracleでのFunction・SysbaseでのProcedure)の時は、
戻り値が特別な現象型(PEXA_StoredFunctionReturnValue)に格納されてサービスに戻ります。
PEXA_StoredFunctionReturnValueはjava.lang.Integerになっています。
PEXA_StoredFunctionReturnValueはモデル定義に含める必要はありません。
Pexaモデルフレームワークが戻り値を自動的に格納します。
|
|
各DBベンダにおけるストアードプロセジャの対応
|
ストアードプロセジャはDBベンダごとに記述方法が微妙に違いますので、
各ベンダのマニュアルを参考に記述する必要があります。
PostgreSQLでは現在ストアードプロセジャーがサポートされていません。
Oracleでのストアードプロセジャの対応
|
記述例:ストアードプロセジャ
CREATE OR REPLACE PROCEDURE STEST001 (
A1 IN INT,
C1 IN VARCHAR2,
VERSION_NUMBER IN INTEGER,
REMOVED_FLAG IN INTEGER,
VALIDITY_FLAG IN INTEGER,
REMOVE_DATETIME IN TIMESTAMP) AS
BEGIN
INSERT INTO LOGX VALUES(A1,C1,REMOVE_DATETIME);
END;
記述例:ストアードファンクション
CREATE OR REPLACE FUNCTION STEST001FUNC (
A1 IN INT,
C1 IN VARCHAR2,
VERSION_NUMBER IN INTEGER,
REMOVED_FLAG IN INTEGER,
VALIDITY_FLAG IN INTEGER,
REMOVE_DATETIME IN TIMESTAMP) RETURN INTEGER AS
BEGIN
INSERT INTO LOGX VALUES(A1,C1,REMOVE_DATETIME);
RETURN 234;
END;
|
|
MySQLでのストアードプロセジャの対応
|
Oracleと比較するとAS句がありません。
パラメータの入出力定義の位置が違います。
記述例:ソースのストアードプロセジャ削除を含むSQL文
DROP PROCEDURE IF EXISTS stest001;
delimiter //
CREATE PROCEDURE STEST001 (
IN A1 INT,
IN C1 VARCHAR(20),
IN VERSION_NUMBER INT,
IN REMOVED_FLAG INT,
IN VALIDITY_FLAG INT,
IN REMOVE_DATETIME TIMESTAMP)
BEGIN
INSERT INTO LOGX VALUES(A1,C1,REMOVE_DATETIME);
END;
//
ストアードプロセジャSQL定義の終了を示すために
delimiter //
を指定し、最後のEND;の後に
//
を記述する必要があります。
ちなみにLOGという名称のDBテーブルはMySQLでは作成できません。
|
|
Sybaseでのストアードプロセジャの対応
|
Sybaseはストアードプロセジャはなく、ストアードファンクションのみのサポートとなります。
記述例:
create proc ST_CATTIE @PCATTIENO BIGINT, @VERSION_NUMBER INT, @VALIDITY_FLAG INT,
@REMOVED_FLAG INT, @LAST_UPDATE_DATETIME DATETIME, @LAST_UPDATOR BIGINT
as
begin
update ZDNAAORDERLOG
set
LAST_UPDATE_DATETIME = @LAST_UPDATE_DATETIME , LAST_UPDATOR = @LAST_UPDATOR
return 12345
end
Sybaseのストアードファンクションのパラメータ名は、先頭に@が必ず付きますが、Pexa内で、@を外した名称で扱います。
|
|
|
|
APサーバーの起動環境変数について
|
DBカラム名の大文字・小文字表記やダブルコーテーションの存在などDBベンダーによって違いがあります。
よって、DBベンダーによって、環境変数を変える必要があります。
関連する環境変数は以下の4種類です。
- db.metainfo
データベースメタ情報の取得方法
SQLユーザ関数及びSQLストアードプロセジャを使用するときは必ず、tableを指定する必要があります。(Sybaseを除く)
- db_sensitive
DBテーブル名・DBカラム名の大文字・小文字変換
DBベンダによって、小文字で定義しても大文字に自動的に変換されることがあるので、DBベンダごとに指定する必要があります。
- column_quote
DBベンダによって、カラム名のダブルコーテーションの使用が出来ないものがありますので、DBベンダごとに指定する必要があります。
- db_vendor
PostgreSQL,Sybaseは、カラム名にテーブル名を連結する等でエラーになるのでその対策のために指定します。他のDBベンダでは記述する必要はありません。
- db.storedprocedure_prefix
ストアードプロセジャのモデル名の接頭語を指定します。db.metainfoがtable以外のときも接頭語が等しいモデルは強制的にデータベースからメタデータを取得します。
PostgreSQLでの定義例
|
db_sensitive=lower
db.metainfo=table
column_quote=false
db_vendor=POSTGRESQL
|
|
MySQLでの定義例
|
db_sensitive=lower
db.metainfo=table
column_quote=false
|
|
Sybaseでの定義例
|
db.storedprocedure_prefix=SPModel
# SPModelにはストアードプロセジャのモデル名の接頭語を指定します。
db_vendor=sybase
|
|
|
|
更新情報
|
- 最終更新者 : $Author: tann $
- 最終更新日時 : $Date:: 2013-01-18 13:44:04 #$
- バージョン : $Revision: 7224 $
|
|
|