Ketika data di database kita baca atau di rubah, database system akan mengontrol apakah terjadi lock terhadap data. Pada dasarnya Lock berfungsi agar transkasi tidak dapat di rubah oleh transaksi lain selama transaksi tersebut sudah dilakukan commited hal ini menjaga konsistensi terhadap datanya.

So, gimana caranya agar kita bisa membaca data tersebut tanpa terjadi lock. kita bisa mengunakan NOLOCK dan READPAST, lalu bedanya apa ?

1. LOCK.
- Membaca data transaksi yang uncommited dan akan membaca data yang terlock.

Contoh :

BEGIN TRAN
UPDATE GS_AREA_CODES SET ac_area_desc = 'JAKARTA BARAT'
WHERE ac_area_id = '11'

lakukan

SELECT count(*) from GS_AREA_CODES with (NOLOCK)

akan menghasilakn 5 baris kemudian lakukan

ROLLBACK TRAN

lakukan kembali

SELECT count(*) from GS_AREA_CODES with (NOLOCK)

akan menghasilakn 5 baris juga.


2. READPAST.
- Membaca data transaksi yang commited dan akan mengabaikan data yang terlock.

Contoh :

BEGIN TRAN
UPDATE GS_AREA_CODES SET ac_area_desc = 'JAKARTA BARAT'
WHERE ac_area_id = '11'

lakukan

SELECT count(*) from GS_AREA_CODES with (READPAST)

akan menghasilakn 4 baris kemudian lakukan

ROLLBACK TRAN

lakukan kembali

SELECT count(*) from GS_AREA_CODES with (READPAST)

akan menghasilakn 5 baris.
Posted by Shanto Labels:
Kadang-kadang kita sering mendebug mencari user exit pada tcode tertentu, dan ini sangat membutuhkan waktu yang lama. Ternyata user exit bisa di list dengan program simple di bawah.



REPORT ysanto_11 .

TABLES : tstc, tadir, modsapt, modact, trdir, tfdir, enlfdir.
TABLES : tstct.

DATA : jtab LIKE tadir OCCURS 0 WITH HEADER LINE.
DATA : field1(30).
DATA : v_devclass LIKE tadir-devclass.

PARAMETERS : p_tcode LIKE tstc-tcode OBLIGATORY.

SELECT SINGLE * FROM tstc WHERE tcode EQ p_tcode.

IF sy-subrc EQ 0.

SELECT SINGLE * FROM tadir WHERE pgmid = 'R3TR' AND object = 'PROG' AND obj_name = tstc-pgmna.

MOVE : tadir-devclass TO v_devclass.
IF sy-subrc NE 0.

SELECT SINGLE * FROM trdir WHERE name = tstc-pgmna.
IF trdir-subc EQ 'F'.

SELECT SINGLE * FROM tfdir WHERE pname = tstc-pgmna.
SELECT SINGLE * FROM enlfdir WHERE funcname = tfdir-funcname.

SELECT SINGLE * FROM tadir WHERE pgmid = 'R3TR' AND object = 'FUGR' AND obj_name EQ enlfdir-area.

MOVE : tadir-devclass TO v_devclass.
ENDIF.
ENDIF.

SELECT * FROM tadir INTO TABLE jtab WHERE pgmid = 'R3TR' AND object = 'SMOD' AND devclass = v_devclass.

SELECT SINGLE * FROM tstct WHERE sprsl EQ sy-langu AND tcode EQ p_tcode.

FORMAT COLOR COL_POSITIVE INTENSIFIED OFF.

WRITE: /(19) 'Transaction Code – ',
20(20) p_tcode,
45(50) tstct-ttext.

SKIP.

IF NOT jtab[] IS INITIAL.

WRITE:/(95) sy-uline.
FORMAT COLOR COL_HEADING INTENSIFIED ON.
WRITE:/1 sy-vline,
2 'Exit Name',
21 sy-vline ,
22 'Description',
95 sy-vline.
WRITE:/(95) sy-uline.

LOOP AT jtab.
SELECT SINGLE * FROM modsapt WHERE sprsl = sy-langu AND name = jtab-obj_name.

FORMAT COLOR COL_NORMAL INTENSIFIED OFF.
WRITE:/1 sy-vline,
2 jtab-obj_name HOTSPOT ON,
21 sy-vline ,
22 modsapt-modtext,
95 sy-vline.
ENDLOOP.

WRITE:/(95) sy-uline.
DESCRIBE TABLE jtab.

SKIP.

FORMAT COLOR COL_TOTAL INTENSIFIED ON.
WRITE:/ 'No of Exits:' , sy-tfill.

ELSE.

FORMAT COLOR COL_NEGATIVE INTENSIFIED ON.

WRITE:/(95) 'No User Exit exists'.

ENDIF.

ELSE.
FORMAT COLOR COL_NEGATIVE INTENSIFIED ON.
WRITE:/(95) 'Transaction Code Does Not Exist'.
ENDIF.

AT LINE-SELECTION.
GET CURSOR FIELD field1.
CHECK field1(4) EQ 'JTAB'.
SET PARAMETER ID 'MON' FIELD sy-lisel+1(10).
CALL TRANSACTION 'SMOD' AND SKIP FIRST SCREEN.


























Ref : http://www.sap-img.com/ab038.htm
Posted by Shanto Labels: