ULOrder テーブルのビジネス・ルールは、次のとおりです。
注文は、承認されていないか、ステータスが NULL である場合にかぎりダウンロードされる。
注文は、統合データベースでもリモート・データベースでも修正できる。
各リモート・データベースには、従業員に対応する注文のみが保持される。
統合データベースでは、注文を挿入、削除、更新できます。これらの操作に対応するスクリプトは、次のとおりです。
download_cursor download_cursor スクリプトの最初のパラメータは、最終ダウンロード・タイムスタンプです。これは、最後の同期以後にリモート・データベースまたは統合データベースのいずれかで修正されたローのみをダウンロードするために使用されます。2 番目のパラメータは従業員 ID です。この ID は、ダウンロードするローを判断するために使用されます。
CustDB の download_cursor スクリプトを次に示します。
CALL ULOrderDownload( {ml s.last_table_download}, {ml s.username} ) |
CustDB の ULOrderDownload プロシージャを次に示します。
CREATE PROCEDURE ULOrderDownload ( IN LastDownload timestamp, IN EmployeeID integer ) BEGIN` SELECT o.order_id, o.cust_id, o.prod_id, o.emp_id, o.disc, o.quant, o.notes, o.status FROM ULOrder o, ULEmpCust ec WHERE o.cust_id = ec.cust_id AND ec.emp_id = EmployeeID AND ( o.last_modified >= LastDownload OR ec.last_modified >= LastDownload) AND ( o.status IS NULL OR o.status != 'Approved' ) AND ( ec.action IS NULL ) END |
download_delete_cursor CustDB の download_delete_cursor スクリプトを次に示します。
SELECT o.order_id, o.cust_id, o.prod_id, o.emp_id, o.disc, o.quant, o.notes, o.status FROM ULOrder o, dba.ULEmpCust ec WHERE o.cust_id = ec.cust_id AND ( ( o.status = ''Approved'' AND o.last_modified >= {ml s.last_table_download} ) OR ( ec.action = ''D'' ) ) AND ec.emp_id = {ml s.username} |
リモート・データベースでは、注文を挿入、削除、更新できます。これらの操作に対応するスクリプトは、次のとおりです。
upload_insert CustDB の upload_insert スクリプトを次に示します。
INSERT INTO ULOrder ( order_id, cust_id, prod_id, emp_id, disc, quant, notes, status ) VALUES( {ml r.order_id, r.cust_id, r.prod_id, r.emp_id, r.disc, r.quant, r.notes, r.status } ) |
upload_update CustDB の upload_update スクリプトを次に示します。
UPDATE ULOrder SET cust_id = {ml r.cust_id}, prod_id = {ml r.prod_id}, emp_id = {ml r.emp_id}, disc = {ml r.disc}, quant = {ml r.quant}, notes = {ml r.notes}, status = {ml r.status} WHERE order_id = {ml r.order_id} |
upload_delete CustDB の upload_delete スクリプトを次に示します。
DELETE FROM ULOrder WHERE order_id = {ml r.order_id} |
upload_fetch CustDB の upload_fetch スクリプトを次に示します。
SELECT order_id, cust_id, prod_id, emp_id, disc, quant, notes, status FROM ULOrder WHERE order_id = {ml r.order_id} |
upload_old_row_insert CustDB の upload_old_row_insert スクリプトを次に示します。
INSERT INTO ULOldOrder ( order_id, cust_id, prod_id, emp_id, disc, quant, notes, status ) VALUES( {ml r.order_id, r.cust_id, r.prod_id, r.emp_id, r.disc, r.quant, r.notes, r.status } ) |
upload_new_row_insert CustDB の upload_new_row_insert スクリプトを次に示します。
INSERT INTO ULNewOrder ( order_id, cust_id, prod_id, emp_id, disc, quant, notes, status ) VALUES( {ml r.order_id, r.cust_id, r.prod_id, r.emp_id, r.disc, r.quant, r.notes, r.status } ) |
resolve_conflict CustDB の resolve_conflict スクリプトを次に示します。
CALL ULResolveOrderConflict |
CustDB の ULResolveOrderConflict プロシージャを次に示します。
CREATE PROCEDURE ULResolveOrderConflict() BEGIN -- approval overrides denial IF 'Approved' = (SELECT status FROM ULNewOrder) THEN UPDATE ULOrder o SET o.status = n.status, o.notes = n.notes FROM ULNewOrder n WHERE o.order_id = n.order_id; END IF; DELETE FROM ULOldOrder; DELETE FROM ULNewOrder; END |
Copyright © 2009, iAnywhere Solutions, Inc. - SQL Anywhere 11.0.1 |