Symfoware(R) Server RDBユーザーズガイド 応用プログラム開発編 - FUJITSU - |
目次 索引 |
カーソルをオープンしたあとに、複数のコネクションにまたがって、同じカーソルの操作を行うことはできません。
ほかのコネクションで同じカーソルを操作するには、カーソルをクローズしたあとでなければなりません。このカーソル操作の例として、図:誤ったカーソルの操作の例に、誤った指定例を示します。また、図:正しいカーソルの操作の例に、正しいカーソル操作の例を示します。
[応用プログラム]
EXEC SQL DECLARE CUR1 CURSOR FOR SELECT 在庫数量 FROM 在庫表 ; … (1) EXEC SQL CONNECT TO 'DB01' AS 'C1' ; … (2) EXEC SQL OPEN CUR1 ; … (3) EXEC SQL CONNECT TO 'DB02' AS 'C2' ; … (4) EXEC SQL FETCH CUR1 INTO :STOCK ; → エラー … (5) |
(1) カーソル“CUR1”を宣言します。
(2) “DB01”に対して“C1”のコネクションを接続します。
(3) “DB01”に対して、カーソル“CUR1”をオープンします。
(4) “DB02”に対して“C2”のコネクションを接続します。
(5) “DB02”に対して、カーソル“CUR1”をFETCHすると、すでにサーバ“DB01”に対してカーソルがオープンしているため、エラーとなります。
[応用プログラム]
EXEC SQL DECLARE CUR1 CURSOR FOR SELECT 在庫数量 FROM 在庫表 ; … (1) EXEC SQL CONNECT TO 'DB01' AS 'C1' ; … (2) EXEC SQL OPEN CUR1 ; … (3) : EXEC SQL CLOSE CUR1 ; … (4) EXEC SQL COMMIT WORK ; … (5) EXEC SQL CONNECT TO 'DB02' AS 'C2' ; … (6) EXEC SQL OPEN CUR1 ; : EXEC SQL CLOSE CUR1 ; |
(1) カーソル“CUR1”を宣言します。
(2) “DB01”に対して“C1”のコネクションを接続します。
(3) “DB01”に対して、カーソル“CUR1”をオープンします。
(4) カーソル“CUR1”をクローズします。
(5) (3)でオープンしたカーソルを使用して更新操作を行った場合、トランザクションを終了します。
(6) “DB02”にコネクションを接続して、カーソル“CUR1”をオープンします。
1つのトランザクションで、複数のコネクションに対してデータベースを更新するSQL文は実行できません。複数のコネクションのデータを更新する場合は、別々のトランザクションにする必要があります。
この更新操作の例として、図:誤った更新操作の例に、誤った指定例を示します。また、図:正しい更新操作の例に、正しい更新操作の例を示します。
[応用プログラム]
EXEC SQL CONNECT TO 'DB01' AS 'C1' ; … (1) EXEC SQL CONNECT TO 'DB02' AS 'C2' ; … (2) EXEC SQL UPDATE 在庫表 SET 在庫数量=300 WHERE 品番号=10; … (3) EXEC SQL SET CONNECTION 'C1' ; … (4) EXEC SQL UPDATE 支店表 SET 社員数=100 WHERE 支店番号=80; → エラー … (5) |
(1) “DB01”に対して“C1”のコネクションを接続します。
(2) “DB02”に対して“C2”のコネクションを接続します。この場合のコネクションが現コネクションになります。
(3) “DB02”に対して更新操作を行います。
(4) “DB01”に現コネクションを変更します。
(5) “DB02”に対する更新操作のトランザクションが終了していないため、“DB01”に対する更新操作はエラーとなります。
[応用プログラム]
EXEC SQL CONNECT TO 'DB01' AS 'C1' ; EXEC SQL CONNECT TO 'DB02' AS 'C2' ; EXEC SQL UPDATE 在庫表 SET 在庫数量=300 WHERE 品番号=10; EXEC SQL COMMIT WORK ; … (1) EXEC SQL SET CONNECTION 'C1' ; … (2) EXEC SQL UPDATE 支店表 SET 社員数=100 WHERE 支店番号=80; EXEC SQL COMMIT WORK ; |
(1) “DB02”に対しての更新操作のトランザクションを終了します。
(2) “DB01”に現コネクションを変更して、“DB01”に対して更新操作を行います。
1つのトランザクションで、複数のコネクションに対して、データベースの定義変更を行うことはできません。
目次 索引 |