VERİTABANI ERİŞİMLERİ

SAP üzerindeki bütün uygulama verileri ilişkisel veritabanı tablolarda tutulur. Tablolarına ulaşmak için SQL dili kullanılır. SAP iki tür SQL erişimine izin verir.

· Native SQL

· Open SQL

NATIVE SQL

Native Sql kullanılarak direkt olarak belirli bir veritabanı sistemine erişilebilir. Erişilen veritabanı üzerinde SQL komutları çalıştırılır. Kullanılan SQL komutları erişilen veritabanı sistemine özgüdür. Komutlar veritabanı sistemlerine (Oracle, MS SQL,…) göre farklılık gösterir. ABAP kodunda SQL komutları EXEC SQL ve ENDEXEC ABAP ifadeleri arasına yazılır.

EXEC SQL.

kod_blogu

ENDEXEC.

OPEN SQL

SAP’ nin kurulu olduğu veritabanında işlem yapmak için kullanılır. Kullanılan ifadelerle tablolara kayıt ekleme, değiştirme veya silme işlemleri yapılabilir.

Open SQL veritabanına direkt olarak erişemez. Tablolara ulaşmadan önce veritabanı arayüz katmanına erişir. Arayüz katmanında OPEN SQL komutları erişilen veritabanı sistemine özgü SQL komutlara çevrilir. Veritabanı arayüz katmanı Open SQL’i SAP’ nin kurulduğu veritabanı sistemine komutları gönderir.Bu kullanım şekliyle Open SQL platform bağımsız bir veritabanı erişimi sağlar.

OPEN SQL İFADELERİ

Bazı Open SQL ifadeleri şunlardır.

Open SQL Komutu Tanım
SELECT Veritabanı tablosundan verileri okur
INSERT Veritabanı tablosuna kayıt ekler.
UPDATE Veritabanı tablosundaki kayıtları değiştir.
MODIFY Veritabanı tablosundaki kayıtları değiştirir, kayıtlar mevcut değilse ekler.
DELETE Veritabanı tablosundan kayıt siler.

Open SQL ifadeleri çalıştırıldıktan sonra SY-SUBRC ve SY-DBCNT sistem değişkenleri değişir.

Sistem Değişkeni Anlamı
sy-subrc Yapılan işlem başarılı ise sıfır (0), değil ise sıfır dışında bir değer atanır.
sy-dbcnt İşlem yapılan kayıt sayısı atanır.

SELECT

Bir veya daha fazla tablodan veri okumak için kullanılır. Okunan veriler bir veri nesnesine (çalışma alanı veya internal tabloya) atanır. Kullanımı aşağıdaki gibidir.

SELECT sonuc

FROM kaynak

INTO|APPENDING hedef

[[FOR ALL ENTRIES IN internal_tablo] WHERE sql_kosulu]

[GROUP BY grup] [HAVING grup_kosulu]

[ORDER BY siralama_anahtari].

Kod_blogu

[ENDSELECT].

SELECT ifadesi okunan verileri hedefe aktarırken bir döngü oluşturur. Bu döngü SELECT ifadesi ile başlar ENDSELECT ifadesi ile sonlanır. Her okunan kayıt hedef ile belirtilen veri nesnesine kopyalanır.

Döngü kullanımı olmadan da kayıtlar veri nesnelerine aktarılabilir. Bu kullanım türünde ENDSELECT kullanılmaz. Bu kullanımlar şunlardır.

· INTO … TABLE veya APPENDING … TABLE kullanıldığı ifadeler. PACKAGE SIZE eki kullanılmaz ise okunan kayıtlar direkt olarak internal tabloya aktarılır.

· SINGLE eki kullanılarak tablodan tek kayıt okunacak ise.

· Tablodan çekilecek alanların * kullanıldığı ve GROUP BY ekinin kullanılmadığı ifadeler.

sonuc: Okunacak kayıt sayısı veya alan bilgilerini içerir. Kullanım şekillerine göre kayıt sayısı veya alanlar farklılık gösterir.

· Okunacak verileri tanımlar. Bir veya daha fazla kayıt olabilir. SINGLE eki kullanılır ise tablodan tek kayıt okunur.

· Birden fazla kayıt içeren okuma işlemlerinde DISTINCT eki aynı olan satırlar eler.

· * kullanılarak tüm sütunların seçilmesi sağlanır.

· Seçilecek alanlar birer birer belirtilebilir. Alan isimleri yazılır. AS eki kullanılarak okunan alan isimleri değiştirilebilir. Alanlarla ilgiil yığın fonksiyonlar ve DISTINCT eki kullanılabilir.

· Parantez içerisinde bir değişken ile dinamik olarak alanlar belirtilebilir.

kaynak: ABAP Dictonary’ de tanımlı tablo veya görünüm olabilir. Aşağıdaki ekler kullanılır.

· veritb_tablosu [AS takma_ad] ile tablo ismine bir takma ad tanımlanır.

· Join ifadesi ile birden fazla tablodan veya görünümden veri okunabilir.

· (veritb_secimleri) [AS takma_ad] parantez kullanılarak tablo veya görünümden kayıt seçim ifadeleri veri nesnesi ile belirtilebilir.

· CLIENT SPECIFIED: Otomatik üst birim seçimini devre dışı bırakıp, istenilen üst birimden veri çekmek için kullanılır. Parametre kullanılır ise WHERE koşulunda üst birim belirtilebilir.

· UP TO n ROWS: Sonuç kümesindeki kayıt sayısını sınırlar. n değeri için i tipinde bir tamsayı belirtilmelidir.

· … BYPASSING BUFFER: Kayıtların tamponlama (SAP buffering) kullanılmadan direkt veritabanından okunmasını sağlar.

hedef: Kaydın aktarım bilgisini tanımlar. Bir çalışma alanı, veri nesnesi veya bir internal tablo olabilir. Kullanım şekilleri aşağıdaki gibidir.

· INTO [CORRESPONDING FIELDS OF] calisma_alani: Kayıtlar çalışma alanına aktarılır. INTO kullanılmış ise tablo alanları ve çalışma alanı alanları aynı olmalıdır. CORRESPONDING FIELDS OF kullanılarak tablo ve çalışma alanı alanları farklı olsa bile uygun bileşenler çalışma alanına aktarılır.

· INTO (veri_nesnesi1, veri_nesnesi2, … ): Tablodan seçilen alanlar veri nesnelerine aktarır.

· INTO|APPENDING [CORRESPONDING FIELDS OF] TABLE internal_tablo [PACKAGE SIZE n]: INTO ile internal tablodaki kayıtlar silinir ve yeni kayıtlar eklenir. APPENDING ile mevcut kayıtlar korunur yenileri eklenir. PACKAGE SIZE n eki ile kayıtlar internal tabloya n ile belirtilen paket büyüklükleri ile eklenir. Bu ek ENDSELECT anahtar kelimesi ile kullanılır.

[FOR ALL ENTRIES IN internal_tablo] WHERE sql_kosulu … ..: İnternal tablodaki tüm kayıtlar için sorgulama yapılır. İnternal tablonun alanları WHERE ifadesinde koşul olarak kullanılabilir.

GROUP BY { {alan1 alan2 …} | (sutun_bilgileri) } … .: Belirtilen sütunlarda aynı olan kayıtları bir satır kayıt olacak şekilde gruplar. Alanlar teker teker veya sutun_bilgileri veri nesnesine atanarak dinamik olarak belirtilebilir.

HAVING sql_kosulu… .: Gruplanmış kayıt sayısını sınırlamak için kullanılır.

ORDER BY: Okunan kayıtları belirtilen alanlara göre sıralar. PRIMARY KEY eki ile tek bir tablodan okunan kayıtları anahtar alanlarına göre sıralar. Alan isimleri teker teker belirtilerek de sıralama işlemi yapılabilir. Teker teker belirtildiğinde ASCENDING veya DESCENDING ekleri ile azalan veya artan sıralama yapılabilir. Parantez içerisinde sıralama bilgileri veri nesnesinde belirtilerek de sıralama yapılabilir.

sy-subrc Anlamı
0 Kayıt okuma başarılı ve bütün değerler ABAP veri nesnesine aktarıldı veya SELECT ENDSELECT ifadeleri arasında en az bir kayıt işlendi.
4 Kayıt bulunamadı.
8 WHERE ifadesinde anahtar alanlar tam belirtilmedi ve FOR UPDATE eki kullanıldı.

sy-dbcnt sistem değişkeni aktarılan kayıt sayısını alır.

Örnek: SELECT ve ENDSELECT ifadeleri arasında SPFLI tablosunun ilk 5 kaydını yazdıran örnek.

DATA gs_spfli TYPE spfli.
SELECT * FROM spfli INTO gs_spfli UP TO 5 ROWS.
WRITE:/ gs_spfli-carrid, gs_spfli-connid.
ENDSELECT.
WRITE: / ‘sy-subrc:’, sy-subrc LEFT-JUSTIFIED,
/ ‘sy-dbcnt:’, sy-dbcnt LEFT-JUSTIFIED.

Örnek: SPFLI tablosundaki ilk 5 kaydı gt_spfli internal tablosuna kopyalayarak ekrana yazan örnek.

DATA: gt_spfli TYPE STANDARD TABLE OF spfli,
gs_spfli TYPE spfli.
SELECT * FROM spfli UP TO 5 ROWS
INTO CORRESPONDING FIELDS OF TABLE gt_spfli.
LOOP AT gt_spfli INTO gs_spfli.
WRITE:/ gs_spfli-carrid, gs_spfli-connid.
ENDLOOP.
WRITE: / ‘sy-subrc:’, sy-subrc LEFT-JUSTIFIED,
/ ‘sy-dbcnt:’, sy-dbcnt LEFT-JUSTIFIED.

Örnek: SINGLE ile SPFLI tablosundan CARRID alanı AA ve CONNID alanı 0017 olan tek kaydı seçen ve ekrana yazdıran örnek.

DATA gs_spfli TYPE spfli.
SELECT SINGLE * FROM spfli INTO gs_spfli WHERE carrid = ‘AA’ AND
connid = ‘0017’.
WRITE:/ gs_spfli-carrid, gs_spfli-connid, gs_spfli-cityfrom.
WRITE: / ‘sy-subrc:’, sy-subrc LEFT-JUSTIFIED,
/ ‘sy-dbcnt:’, sy-dbcnt LEFT-JUSTIFIED.

Örnek: INTO VE APPENDING kullanımını gösteren örnek. SPFLI tablosundan CARRID alanı AA olan kayıtlar internal tabloya eklenir. Sadece CARRID, CONNID ve CITYFROM alanları internal tabloya eklenir. Ardından APPENDING ile internal tablodaki kayıtlara ek olarak CARRID alanı LH olan kayıtlar ilave edilir ve ekrana yazdırılır. Ekrana yazdırılan alanlar içerisinde DEPTIME alanıda vardır. Bu alan seçimde belirtilmediği için internal tablo eklenmediği için ekrana alanın varsayılan değeri yazdırılır. SKIP satır atlamak için, ULINE yatay çizgi çizmek için kullanılmıştır.

DATA: gt_spfli TYPE STANDARD TABLE OF spfli,
gs_spfli TYPE spfli.
SELECT carrid connid cityfrom
FROM spfli
INTO CORRESPONDING FIELDS OF TABLE gt_spfli
WHERE carrid = ‘AA’.
WRITE: / ‘sy-subrc:’, sy-subrc LEFT-JUSTIFIED,
/ ‘sy-dbcnt:’, sy-dbcnt LEFT-JUSTIFIED.
SKIP.
WRITE / ‘İnternal tabloya INTO ile CARRID AA olan kayıtlar eklendi.’.
ULINE /1(58).
LOOP AT gt_spfli INTO gs_spfli.
WRITE:/ gs_spfli-carrid,   gs_spfli-connid,
gs_spfli-cityfrom, gs_spfli-deptime.
ENDLOOP.
SKIP 2.
SELECT carrid connid cityfrom
FROM spfli
APPENDING CORRESPONDING FIELDS OF TABLE gt_spfli
WHERE carrid = ‘LH’.
WRITE: / ‘sy-subrc:’, sy-subrc LEFT-JUSTIFIED,
/ ‘sy-dbcnt:’, sy-dbcnt LEFT-JUSTIFIED.
SKIP.
WRITE /  ‘İnternal tabloya APPENDING ile CARRID LH olan kayıtlar eklendi.’.
ULINE /1(63).
LOOP AT gt_spfli INTO gs_spfli.
WRITE:/ gs_spfli-carrid,   gs_spfli-connid,
gs_spfli-cityfrom, gs_spfli-deptime.
ENDLOOP.

Örnek: SPFLI tablosundaki ilk 5 kayıda göre SFLIGHT tablosundan okuma yapan örnek.

DATA: gt_spfli   TYPE STANDARD TABLE OF spfli,
gt_sflight TYPE STANDARD TABLE OF sflight,
gs_sflight TYPE sflight.
SELECT * FROM spfli UP TO 5 ROWS
INTO CORRESPONDING FIELDS OF TABLE gt_spfli.
IF gt_spfli[] IS NOT INITIAL.
SELECT * FROM sflight
INTO CORRESPONDING FIELDS OF TABLE gt_sflight
FOR ALL ENTRIES IN gt_spfli
WHERE carrid = gt_spfli-carrid AND
connid = gt_spfli-connid.
ENDIF.
LOOP AT gt_sflight INTO gs_sflight.
WRITE:/ gs_sflight-carrid, gs_sflight-connid.
ENDLOOP.
WRITE: / ‘sy-subrc:’, sy-subrc LEFT-JUSTIFIED,
/ ‘sy-dbcnt:’, sy-dbcnt LEFT-JUSTIFIED.

Örnek: INNER JOIN eki kullanılarak SPFLI tablosundaki CARRID alanı LH değerine sahip kayıtları SFLIGHT tablusundan GT_SFLIGHT internal tablosuna ekleyen ve ekrana yazdıran örnek.

DATA: gt_spfli   TYPE STANDARD TABLE OF spfli,
gt_sflight TYPE STANDARD TABLE OF sflight,
gs_sflight TYPE sflight.
SELECT * FROM spfli AS a
INNER JOIN sflight AS b ON ( a~carrid = b~carrid AND
a~connid = b~connid )
INTO CORRESPONDING FIELDS OF TABLE gt_sflight
WHERE a~carrid = ‘LH’.
LOOP AT gt_sflight INTO gs_sflight.
WRITE:/ gs_sflight-carrid, gs_sflight-connid.
ENDLOOP.
WRITE: / ‘sy-subrc:’, sy-subrc LEFT-JUSTIFIED,
/ ‘sy-dbcnt:’, sy-dbcnt LEFT-JUSTIFIED.

Örnek: DISTINCT kullanım örneği.

DATA: gt_spfli TYPE STANDARD TABLE OF spfli,
gs_spfli TYPE spfli.
SELECT DISTINCT cityto
FROM spfli
INTO CORRESPONDING FIELDS OF TABLE gt_spfli
WHERE cityfrom = ‘BERLIN’.
LOOP AT gt_spfli INTO gs_spfli.
WRITE gs_spfli-cityto.
ENDLOOP.

Örnek: SFLIGHT tablosundaki CARRID alanına göre minimum ve maksimum değerlerini yazan örnek.

DATA: BEGIN OF gs_carrid,
carrid TYPE sflight-carrid,
min    TYPE sflight-price,
max    TYPE sflight-price,
END OF gs_carrid.
SELECT carrid MIN( price ) MAX( price )
FROM sflight
INTO (gs_carrid-carrid, gs_carrid-min, gs_carrid-max)
GROUP BY carrid.
WRITE: / gs_carrid-carrid, gs_carrid-min, gs_carrid-max.
ENDSELECT.

Örnek: SFLIGHT tablosundaki ilk 5 kaydı GT_SFLIGHT internal tablosuna koplayan ve PRICE alanına göre azalan şekilde sıralayan örnek.

DATA: gt_sflight TYPE STANDARD TABLE OF sflight,
gs_sflight TYPE sflight.
SELECT * FROM sflight UP TO 5 ROWS
INTO CORRESPONDING FIELDS OF TABLE gt_sflight
ORDER BY price DESCENDING.
LOOP AT gt_sflight INTO gs_sflight.
WRITE:/ gs_sflight-carrid, gs_sflight-connid, gs_sflight-price.
ENDLOOP.

INSERT

Veritabanı tablosuna kayıt eklemek için kullanılır.

INSERT { {INTO hedef VALUES calisma_alani}

| { hedef FROM calisma_alani|{TABLE internal_tablo} } }.

hedef: Kayıtların ekleneceği tablo veya görünümdür. Tablo ismi direkt olarak belirtilebilir veya parantez içerisinde değişken ile belirtilebilir. CLIENT SPECIFIED otomatik üst birim seçimini devre dışı bırakır. Kayıt ekleme işlemi için yeni belirtilen üst birim kullanılır.

VALUES’ dan sonra veya FROM’ dan sonra çalışma alanı ismi yazarak, çalışma alanındaki kayıt eklenebilir veya TABLE ile belirtilen internal tablodaki kayıtlar eklenebilir. TABLE’ dan sonra ACCEPTING DUPLICATE KEYS eki kullanılarak veritabanı tablosunda kayıt daha önce mevcut ise hata alınmaması sağlanır. Sadece veritabanı tablosunda mevcut olmayan kayıtlar eklenir.

Örnek: GS_SFLIGHT çalışma alanındaki kaydı SFLIGHT tablosuna ekleyen örnek.

DATA gs_sflight TYPE sflight.
CLEAR gs_sflight.
gs_sflight-carrid   = ‘LH’.
gs_sflight-connid   = ‘0026’.
gs_sflight-fldate   = sy-datum.
gs_sflight-price    = 1100.
gs_sflight-currency = ‘USD’.
INSERT into sflight values gs_sflight.
COMMIT WORK AND WAIT.

WRITE: / ‘sy-subrc:’, sy-subrc LEFT-JUSTIFIED,
/ ‘sy-dbcnt:’, sy-dbcnt LEFT-JUSTIFIED.

Eklenen kayıtları SE16N işlem kodu ile görüntüleyebilirsiniz.

Örnek: Internal tablodan kayıt ekleyen örnek.

Örnek: SFLIGHT tablosuna GT_SFLIGHT internal tablosundaki kayıtları ekleyen örnek.

DATA: gt_sflight TYPE STANDARD TABLE OF sflight,
gs_sflight TYPE sflight.
CLEAR gs_sflight.
gs_sflight-carrid   = ‘AA’.
gs_sflight-connid   = ‘0026’.
gs_sflight-fldate   = sy-datum.
gs_sflight-price    = 1000.
gs_sflight-currency = ‘USD’.
APPEND gs_sflight TO gt_sflight.
CLEAR gs_sflight.
gs_sflight-carrid   = ‘AF’.
gs_sflight-connid   = ‘0026’.
gs_sflight-fldate   = sy-datum.
gs_sflight-price    = 1200.
gs_sflight-currency = ‘USD’.
APPEND gs_sflight TO gt_sflight.
INSERT sflight FROM TABLE gt_sflight.
COMMIT WORK AND WAIT.
WRITE: / ‘sy-subrc:’, sy-subrc LEFT-JUSTIFIED,
/ ‘sy-dbcnt:’, sy-dbcnt LEFT-JUSTIFIED.

UPDATE

Veritabanı tablosundaki kayıtları güncellemek için kullanılır. Kullanımı aşağıdaki gibidir.

UPDATE hedef kaynak.

hedef: Kayıtların güncelleneceği tablo veya görünümdür. Tablo ismi direkt olarak belirtilebilir veya parantez içerisinde değişken ile belirtilebilir. CLIENT SPECIFIED otomatik üst birim seçimini devre dışı bırakır. Kayıt güncelleme işlemi için yeni belirtilen üst birim kullanılır.

kaynak: Değişecek kayıtları belirtir. SET sonrası değişecek alanlar belirtilebilir. SET ile WHERE kullanılarak hangi kayıtların değişeceği belirtilir. Kayıtları güncellemenin bir diğer yolu FROM kullanılarak çalışma alanı veya internal tablo kullanmaktır. Çalışma alanı kullanılarak tablodaki bir kaydın güncellenmesi sağlanabilir. Tablodaki değişecek kaydın anahtar alanları çalışma alanında tanımlanmalıdır. İnternal tablodan güncelleme yapmak için FROM dan sonra TABLE kullanılmalıdır. İnternal tablodaki kayıtlar teker teker güncelleme için kullanılır.

Örnek: SFLIGHT tablosundaki WHERE koşulunda belirtilen koşula göre bulunan kayıtların PRICE alanını güncelleyen örnek.

UPDATE sflight SET price = 6000
WHERE carrid = ‘LH’   AND
connid = ‘0026’ AND
fldate = sy-datum.
COMMIT WORK AND WAIT.
WRITE: / ‘sy-subrc:’, sy-subrc LEFT-JUSTIFIED,
/ ‘sy-dbcnt:’, sy-dbcnt LEFT-JUSTIFIED.

Örnek: SFLIGHT tablosundaki kaydın PRICE alanını GS_SFLIGHT çalışma alanındaki kayda göre güncelleyen örnek.

DATA gs_sflight TYPE sflight.
CLEAR gs_sflight.
gs_sflight-carrid   = ‘LH’.
gs_sflight-connid   = ‘0026’.
gs_sflight-fldate   = sy-datum.
gs_sflight-price    = 3000.
gs_sflight-currency = ‘USD’.
UPDATE sflight FROM gs_sflight.
COMMIT WORK AND WAIT.
WRITE: / ‘sy-subrc:’, sy-subrc LEFT-JUSTIFIED,
/ ‘sy-dbcnt:’, sy-dbcnt LEFT-JUSTIFIED.

Örnek: SFLIGHT tablosundaki kayıtlarıın PRICE alanını GT_SFLIGHT internal tablosundaki kayıtlara göre güncelleyen örnek.

DATA: gt_sflight TYPE STANDARD TABLE OF sflight,
gs_sflight TYPE sflight.
CLEAR gs_sflight.
gs_sflight-carrid   = ‘AA’.
gs_sflight-connid   = ‘0026’.
gs_sflight-fldate   = sy-datum.
gs_sflight-price    = 4000.
gs_sflight-currency = ‘USD’.
APPEND gs_sflight TO gt_sflight.

CLEAR gs_sflight.
gs_sflight-carrid   = ‘AF’.
gs_sflight-connid   = ‘0026’.
gs_sflight-fldate   = sy-datum.
gs_sflight-price    = 5000.
gs_sflight-currency = ‘USD’.
APPEND gs_sflight TO gt_sflight.
MODIFY sflight FROM TABLE gt_sflight.
COMMIT WORK AND WAIT.
WRITE: / ‘sy-subrc:’, sy-subrc LEFT-JUSTIFIED,
/ ‘sy-dbcnt:’, sy-dbcnt LEFT-JUSTIFIED.

MODIFY

Veritabanı tablosundaki kayıtları değiştirir. Kayıtlar mevcut değil ise ekler. Kullanımı aşağıdaki gibidir.

MODIFY hedef FROM kaynak.

hedef: Kayıtların güncelleneceği tablo veya görünümdür. Tablo ismi direkt olarak belirtilebilir veya parantez içerisinde değişken ile belirtilebilir. CLIENT SPECIFIED otomatik üst birim seçimini devre dışı bırakır. Kayıt güncelleme işlemi için yeni belirtilen üst birim kullanılır.

kaynak: Değişecek/eklenecek kayıtları belirtir. Kayıtları güncellemek için çalışma alanı veya internal tablo kullanılabilir. Çalışma alanı kullanılarak tablodaki bir kaydın güncellenmesi sağlanabilir. Tablodaki değişecek kaydın anahtar alanları çalışma alanında tanımlanmalıdır. İnternal tablodan güncelleme yapmak için FROM dan sonra TABLE kullanılmalıdır. İnternal tablodaki kayıtlar teker teker güncelleme için kullanılır.

Örnek: SFLIGHT tablosundaki kaydın PRICE alanını GS_SFLIGHT çalışma alanındaki kayda göre güncelleyen örnek.

DATA gs_sflight TYPE sflight.
CLEAR gs_sflight.
gs_sflight-carrid   = ‘LH’.
gs_sflight-connid   = ‘0026’.
gs_sflight-fldate   = sy-datum.
gs_sflight-price    = 2000.
gs_sflight-currency = ‘USD’.
MODIFY sflight FROM gs_sflight.
COMMIT WORK AND WAIT.
WRITE: / ‘sy-subrc:’, sy-subrc LEFT-JUSTIFIED,
/ ‘sy-dbcnt:’, sy-dbcnt LEFT-JUSTIFIED.

Örnek: SFLIGHT tablosundaki kayıtlarıın PRICE alanını GT_SFLIGHT internal tablosundaki kayıtlara göre değiştiren örnek.

DATA: gt_sflight TYPE STANDARD TABLE OF sflight,
gs_sflight TYPE sflight.
CLEAR gs_sflight.
gs_sflight-carrid   = ‘AA’.
gs_sflight-connid   = ‘0026’.
gs_sflight-fldate   = sy-datum.
gs_sflight-price    = 800.
gs_sflight-currency = ‘USD’.
APPEND gs_sflight TO gt_sflight.
CLEAR gs_sflight.
gs_sflight-carrid   = ‘AF’.
gs_sflight-connid   = ‘0026’.
gs_sflight-fldate   = sy-datum.
gs_sflight-price    = 1500.
gs_sflight-currency = ‘USD’.
APPEND gs_sflight TO gt_sflight.
MODIFY sflight FROM TABLE gt_sflight.
COMMIT WORK AND WAIT.
WRITE: / ‘sy-subrc:’, sy-subrc LEFT-JUSTIFIED,
/ ‘sy-dbcnt:’, sy-dbcnt LEFT-JUSTIFIED.

DELETE

Veritabanı tablosundan kayıtları siler. Kullanımı aşağıdaki gibidir.

DELETE { {FROM hedef [WHERE sql_kosulu]}

| {hedef FROM kaynak} }.

hedef: Kayıtların silineceği tablodur. Tablo ismi direkt olarak belirtilebilir veya parantez içerisinde değişken ile belirtilebilir. CLIENT SPECIFIED otomatik üst birim seçimini devre dışı bırakır. Kayıt güncelleme işlemi için yeni belirtilen üst birim kullanılır. WHERE sql_kosulu ile silinecek kayıtlar belirtilir.

kaynak: Silinecek kayıtları belirtir. Kayıtları silmek için çalışma alanı veya internal tablo kullanılabilir. Çalışma alanı kullanılarak tablodaki bir kaydın silinmesi sağlanabilir. Tablodaki silinecek kaydın anahtar alanları çalışma alanında tanımlanmalıdır. İnternal tablodan silmek için için FROM dan sonra TABLE kullanılmalıdır. İnternal tablodaki kayıtlar teker teker güncelleme için kullanılır.

Örnek: SFLIGHT tablosundaki FLDATE alanı günün tarihi olan kayıtları silen örnek.

DELETE FROM sflight WHERE fldate = sy-datum.
COMMIT WORK AND WAIT.
WRITE: / ‘sy-subrc:’, sy-subrc LEFT-JUSTIFIED,
/ ‘sy-dbcnt:’, sy-dbcnt LEFT-JUSTIFIED.

Örnek: Çalışma alanına göre SFLIGHT tablosundaki kayıtları silen örnek.

DATA gs_sflight TYPE sflight.
CLEAR gs_sflight.
gs_sflight-carrid   = ‘LH’.
gs_sflight-connid   = ‘0026’.
gs_sflight-fldate   = sy-datum.
DELETE sflight FROM gs_sflight.
COMMIT WORK AND WAIT.
WRITE: / ‘sy-subrc:’, sy-subrc LEFT-JUSTIFIED,
/ ‘sy-dbcnt:’, sy-dbcnt LEFT-JUSTIFIED.

Örnek: SFLIGHT tablosundaki kayıtları GT_SFLIGHT internal tablosundaki kayıtlara göre silen örnek.

DATA: gt_sflight TYPE STANDARD TABLE OF sflight,
gs_sflight TYPE sflight.
CLEAR gs_sflight.
gs_sflight-carrid   = ‘AA’.
gs_sflight-connid   = ‘0026’.
gs_sflight-fldate   = sy-datum.
APPEND gs_sflight TO gt_sflight.
CLEAR gs_sflight.
gs_sflight-carrid   = ‘AF’.
gs_sflight-connid   = ‘0026’.
gs_sflight-fldate   = sy-datum.
APPEND gs_sflight TO gt_sflight.
DELETE sflight FROM TABLE gt_sflight.
COMMIT WORK AND WAIT.
WRITE: / ‘sy-subrc:’, sy-subrc LEFT-JUSTIFIED,
/ ‘sy-dbcnt:’, sy-dbcnt LEFT-JUSTIFIED.

Leave a Reply

Your email address will not be published. Required fields are marked *