Bölüm 7 : Transaction Yönetimi
Bu dersi tamamladığımız zaman şunları yapabileceksiniz;
• Bir transaction tanımlamak• Veritabanı bütünlüğünü tanımlamak• Bir transaction’ın nerede başlayıp nerede bittiğini bilmek• Transaction’ların ne zaman etkin olduklarını bilmek• Varsayılan transaction kapsamını değiştirmek
Transaction: Ya Hep Ya Hiç
Bir Transaction İçinde Veritabanını Güncellemek
REPEAT:. . .
CREATE Customer.. . .END.
Transaction
Veri Bütünlüğünü Korumak
REPEAT:. . .
CREATE Customer.. . .END.
REPEAT:. . .
CREATE Customer.. . .END.
Tamamlanmış Transaction (Ġkinci Customer kaydını ekle)
Tamamlanmamış Transaction (3. Customer kaydını ekle)
Veritabanı
SİSTEM
HATASI!
Neler Saklandı?
SİSTEM
HATASI!
Transaction Kapsamını Tanımlamak
. . .DEFINE VARIABLE iCount AS INTEGER NO-UNDO.REPEAT WHILE iCount < 3:CREATE Customer.DISPLAY CustNum.UPDATE Name EmailAddress Contact WITH 1 COLUMN.iCount = iCount + 1.
END.. . .
Transaction bloğu Doğrudan veritabanına yazılır
Transaction Kapsamı Nedir?
. . .
. . .FOR EACH Invoice WHERE Invoice.CustNum = iCustNum:MESSAGE "Are you sure you want to delete invoice#" invoice.invoicenum
"of customer #" invoice.custnum VIEW-AS ALERT-BOX BUTTONS YES-NO UPDATE lYesno.
IF lYesno THENDELETE Invoice.ELSE DO: /* DO statement #1 */MESSAGE "Cancelled deletion of invoice #" invoice.invoicenum .RETURN NO-APPLY.
END. /* End DO statement #1 */END. /* End FOR EACH Invoice3 */
FOR EACH Order WHERE Order.CustNum = iCustNum:. . .. . .
Bir LISTING Dosyasının Derlenmesi (COMPILE)
forOrder:
FOR EACH Order WHERE OrderNum < 5:
FOR EACH Customer OF Order:
DISPLAY Customer.NAME FORMAT "x(15)"
Ordernum FORMAT ">>9".
1 /***********************/
2 /* eTrans1.p */
3 /***********************/
4 forOrder:
5 1 FOR EACH Order WHERE OrderNum < 5:
6 2 FOR EACH Customer OF Order:
7 2 DISPLAY Customer.NAME FORMAT "x(15)"
8 2 Ordernum FORMAT ">>9".
COMPILE eTrans1.p LISTING eTrans1.lst.
Transaction Kapsamının Belirlenmesi
File Name Line Blk.Type Tran Blk.Label--------- ---- -------- ---- ---------eTrans1.p 0 Procedure No eTrans1.p 9 For No forOrderBuffers: Mysports.Order
eTrans1.p 10 For Yes Buffers: Mysports.CustomerFrames: Unnamed
TRANSACTION Fonksiyonunun Kullanımı
. . .
. . .FOR EACH Invoice WHERE Invoice.CustNum = iCustNum:MESSAGE "Are you sure you want to delete invoice#" invoice.invoicenum
"of customer #" invoice.custnum VIEW-AS ALERT-BOX BUTTONS YES-NO UPDATE lYesno.
IF lYesno THEN
FOR EACH Order WHERE Order.CustNum = iCustNum:. . .. . .
Bir transaction aktif
olduğunda çalışması
gereken kod
Transaction’ın aktif
OLMADIĞI durumda
çalışması gereken kod
IF TRANSACTION THEN response-if-true ELSE response-of-false
Transaction’ın Aktif Olup Olmadığını Sorgulamak
REPEAT: MESSAGE "A transaction" (IF TRANSACTION THEN "IS" ELSE
"IS NOT")"active in the outer REPEAT block," SKIP" before creating the Order" VIEW-AS ALERT-BOX.
CREATE Order.DISPLAY OrderNum OrderDate.UPDATE CustNum.
Uygulama 1 : Transaction Kapsamının Tespit Edilmesi
Transaction Kapsamının Özel Olarak Belirlenmesi
Belirtilmiş transaction kapsamı
. . .DO TRANSACTION:. . .. . .FOR EACH . . .
. . .
. . .END.. . .. . .
END.
Varsayılan Transaction Kapsamı
Varsayılan Transaction Kapsamının Değiştirilmesi
<start outer transaction-scoping block>. . .FOR EACH Customer
WHERE SalesRep = "RDR" TRANSACTION:
ASSIGN SalesRep = “DOS".
DISPLAY NAME SalesRep.
END.. . .
<end outer transaction-scoping block>
Game Set Match DOS
Lagt Kort Ligger DOS
Soccer Universe DOS
Play Sports DOS
Trans 1
Trans 2
Trans 3
Trans 4
Neler Kaydedildi?
SİSTEM
HATASI!
Veritabanı
Uygulama 2 : Varsayılan Kapsamla Kaydedilen Veri
Bir Transaction’ın Kapsamının Genişletilmesi
Orjinal Transaction Kapsamı
DO TRANSACTION:REPEAT:
. . .
. . .
. . .REPEAT:
. . .
. . .
END. /* Inner REPEAT block */END. /* Outer REPEAT block */
END. /* Transaction */
Yeni transaction kapsamı
Uygulama 3 : Artırılmış Kapsamla Kaydedilen Veri
Bir Transaction’ın Kapsamının Küçültülmesi
Daha küçük iki transaction kapsamı
REPEAT:DO TRANSACTION:
<Do task 1>. . .. . .
END. /* end first transaction */REPEAT TRANSACTION:
<Do task 2>. . .. . .
END. /* end second transaction */END. /* End REPEAT block */
Orjinal transaction kapsamı
Uygulama 4 : Küçültülmüş Kapsamla Kaydedilen Veri
Bir Alt-transaction ile Çalışmak
REPEAT: /* Start of the transaction */
PROMPT-FOR Order.OrderNum.. . .SET Order.PO.
REPEAT:. . .
SET Qty.. . .
END. /* Inner REPEAT block - subtransaction */
END. /* Outer REPEAT block – transaction */
Transaction Alt-transaction
Alt-transaction’ları Tanımlamak
Line Blk
---- ---
2 1 REPEAT: /* Start of the transaction */
3 1 PROMPT-FOR Order.OrderNum.
4 1 FIND Order WHERE OrderNum = INPUT Order.OrderNum.
5 1 DISPLAY OrderNum CustNum PO SalesRep.
6 1 SET Order.PO.
7 2 REPEAT:
8 2 FIND NEXT OrderLine OF order.
9 2 DISPLAY LineNum ItemNum Qty Price . . .
10 2 SET Qty.
11 2 DISPLAY Qty * Price LABEL "Total price".
12 1 END. /* FIND OrderLine block */
13 END. /* End of the transaction */
Ġlk düzey blok
Ġkinci düzey blok
Değişkenleri Saklamak
lbi4321
iVctr = 1
dNewPrice = 10.25
iLineNum = 16
Bir Trsansaction içinden Bir Alt-prosedur’ü Çağırmak
eRunTrans.p
eUpdOrder.p
Transaction Kapsamı
FOR EACH Order OF Customer:DISPLAY Order...UPDATE Carrier....
END.
REPEAT:PROMPT-FOR Customer.CustNum.FIND Customer USING CustNum.
...
UPDATE CreditLimit.....
RUN eUpdOrder.p (BUFFER Customer)....
END.
Uygulama 5 : Bir Transaction İçinden Bir Alt-procedur’ü Çağırmak
Neler Kaydedildi?
SİSTEM
HATASI!
Veritabanı
Uygulama 6 : Varsayılan Transaction Kapsamını Değiştirmek