QAnywhere SQL を使用すると、QAnywhere .NET、C++、Java API のほどんどのメッセージング機能を SQL で実行できます。たとえば、メッセージの作成、メッセージ・プロパティと内容の設定や取得、メッセージの送受信、メッセージ同期のトリガ、メッセージ・ストア・プロパティの設定と取得などの機能を実行できます。
QAnywhere SQL で生成されたメッセージを、プログラミング API で作成されたクライアントで受信することもできます。JMS コネクタがサーバ上で設定されている場合は、JMS クライアントがこのメッセージを受信することもできます。同様に、QAnywhere .NET、C++、Java API、または JMS のクライアントで生成されたメッセージを、QAnywhere SQL で受信することもできます。
QAnywhere SQL メッセージングは、ユーザ・トランザクションと共存できます。つまり、トランザクションをコミットすると、その接続でのすべての QAnywhere 操作がコミットされます。
QAnywhere クライアント・アプリケーションの作成を参照してください。
QAnywhere ストアド・プロシージャを実行するパーミッションを自動的に与えられるのは、DBA 権限を持つユーザだけです。ユーザにパーミッションを付与するには、DBA 権限を持つユーザが ml_qa_grant_messaging_permissions プロシージャを呼び出す必要があります。
ml_qa_grant_messaging_permissionsを参照してください。
QAnywhere SQL API では、IMPLICIT_ACKNOWLEDGEMENT と EXPLICIT_ACKNOWLEDGEMENT のどちらのモードもサポートしません。SQL API を介するメッセージは、すべてトランザクション志向です。
次の例では、在庫テーブルのトリガを作成します。このトリガは、ある品目の在庫が特定のしきい値を下回ると、メッセージを送信します。メッセージは、トリガを呼び出したトランザクションがコミットされた後で送信されます。トランザクションがロールバックされた場合、メッセージは送信されません。
CREATE TRIGGER inventory_trigger AFTER UPDATE ON inventory REFERENCING old AS oldinv new AS newinv FOR EACH ROW begin DECLARE msgid VARCHAR(128); IF oldinv.quantity > newinv.quantity AND newinv.quantity < 10 THEN -- Create the message SET msgid = ml_qa_createmessage(); -- Set the message content CALL ml_qa_settextcontent( msgid, 'Inventory of item ' || newinv.itemname || ' has fallen to only ' || newinv.quantity ); -- Make the message high priority CALL ml_qa_setpriority( msgid, 9 ); -- Set a message subject CALL ml_qa_setstringproperty( msgid, 'tm_Subject', 'Inventory low!' ); -- Send the message to the inventoryManager queue CALL ml_qa_putmessage( msgid, 'inventoryManager' ); end if; end |
Copyright © 2009, iAnywhere Solutions, Inc. - SQL Anywhere 11.0.1 |