pl/sql ve oracle forms da lpad ve rpad kullanımı
Merhaba,
Pl/Sql ve Oracle Forms içinde sabit bir metin ya da değişen özel durumlarda sabit bir uzunluk değerine sahip olması gerekebilir. Bu gibi durumlar için sabit uzunluğun değeri ne kadar ise elimizdeki verinin o uzunluğa ulaşması için öncelikle elimizdeki değişkenin uzunluk bilgisini öğrenip, geriye kalan değer kadar sabit bir karakter ekleyerek istenilen uzunluğa erişebiliriz. Fakat bu yöntem hem uzun hem de zahmetlidir. Çünkü bu işlemler için gereğinden fazla değişkene ihtiyacımız olur. Örnek olarak aşağıdaki kodlar ile bu durumu daha iyi görebiliriz.
DECLARE
CURSOR lr_pad IS
SELECT rownum,
table_name
FROM all_tables
WHERE owner = 'SYS'
AND rownum <= 10;
lpad_val VARCHAR2(10);
rpad_val VARCHAR2(10);
BEGIN
FOR cur_rec IN lr_pad LOOP
IF length(cur_rec.rownum) = 10 THEN
lpad_val := cur_rec.rownum;
rpad_val := cur_rec.rownum;
ELSIF length(cur_rec.rownum) = 9 THEN
lpad_val := '0' || cur_rec.rownum;
rpad_val := cur_rec.rownum || '0';
ELSIF length(cur_rec.rownum) = 8 THEN
lpad_val := '00' || cur_rec.rownum;
rpad_val := cur_rec.rownum || '00';
ELSIF length(cur_rec.rownum) = 7 THEN
lpad_val := '000' || cur_rec.rownum;
rpad_val := cur_rec.rownum || '000';
ELSIF length(cur_rec.rownum) = 6 THEN
lpad_val := '00000' || cur_rec.rownum;
rpad_val := cur_rec.rownum || '0000';
ELSIF length(cur_rec.rownum) = 5 THEN
lpad_val := '000000' || cur_rec.rownum;
rpad_val := cur_rec.rownum || '000000';
ELSIF length(cur_rec.rownum) = 4 THEN
lpad_val := '0000000' || cur_rec.rownum;
rpad_val := cur_rec.rownum || '0000000';
ELSIF length(cur_rec.rownum) = 3 THEN
lpad_val := '00000000' || cur_rec.rownum;
rpad_val := cur_rec.rownum || '00000000';
ELSIF length(cur_rec.rownum) = 2 THEN
lpad_val := '00000000' || cur_rec.rownum;
rpad_val := cur_rec.rownum || '00000000';
ELSIF length(cur_rec.rownum) = 1 THEN
lpad_val := '000000000' || cur_rec.rownum;
rpad_val := cur_rec.rownum || '000000000';
END IF;
dbms_output.put_line('Lpad Bilgisi=' || lpad_val || '=' || cur_rec.table_name || chr(13) ||
'Rpad Bilgisi=' || rpad_val || '=' || cur_rec.table_name);
dbms_output.put_line('---');
END LOOP;
END;
Yukarıdaki komutlar ile yapılmak istenilen on(10) satır veri dönen bir query den satır bilgilerinin sabit olarak on(10) karakter uzunluğa sahip olmasını sağlamaktır. Görüldüğü gibi bu işlem için birçok kontrol ve gereksiz değişkenlere ihtiyaç duyulmuştur. Bu işlemin sonucu aşağıdaki gibidir.
Lpad Bilgisi=0000000001=ACCESS$ Rpad Bilgisi=1000000000=ACCESS$ --- Lpad Bilgisi=0000000002=ALERT_QT Rpad Bilgisi=2000000000=ALERT_QT --- Lpad Bilgisi=0000000003=APPLY$_CONF_HDLR_COLUMNS Rpad Bilgisi=3000000000=APPLY$_CONF_HDLR_COLUMNS --- Lpad Bilgisi=0000000004=APPLY$_CONSTRAINT_COLUMNS Rpad Bilgisi=4000000000=APPLY$_CONSTRAINT_COLUMNS --- Lpad Bilgisi=0000000005=APPLY$_DEST_OBJ Rpad Bilgisi=5000000000=APPLY$_DEST_OBJ --- Lpad Bilgisi=0000000006=APPLY$_DEST_OBJ_CMAP Rpad Bilgisi=6000000000=APPLY$_DEST_OBJ_CMAP --- Lpad Bilgisi=0000000007=APPLY$_DEST_OBJ_OPS Rpad Bilgisi=7000000000=APPLY$_DEST_OBJ_OPS --- Lpad Bilgisi=0000000008=APPLY$_ERROR Rpad Bilgisi=8000000000=APPLY$_ERROR --- Lpad Bilgisi=0000000009=APPLY$_ERROR_HANDLER Rpad Bilgisi=9000000000=APPLY$_ERROR_HANDLER --- Lpad Bilgisi=0000000010=APPLY$_ERROR_TXN Rpad Bilgisi=1000000000=APPLY$_ERROR_TXN
Aynı sonucu verecek olan ”lpad” ve “rpad” kullanımı ile yapılan komutlar aşağıdadır.
DECLARE
CURSOR lr_pad IS
SELECT rownum,
table_name
FROM all_tables
WHERE owner = 'SYS'
AND rownum <= 10;
lpad_val VARCHAR2(10);
rpad_val VARCHAR2(10);
BEGIN
FOR cur_rec IN lr_pad LOOP
lpad_val := lpad(cur_rec.rownum, 10, '0');
rpad_val := rpad(cur_rec.rownum, 10, '0');
dbms_output.put_line('Lpad Bilgisi=' || lpad_val || '=' || cur_rec.table_name || chr(13) ||
'Rpad Bilgisi=' || rpad_val || '=' || cur_rec.table_name);
dbms_output.put_line('---');
END LOOP;
END;
Görüldüğü gibi if kontrollerine gerek kalmadan aynı işlemi tek satırda çözüme kavuşturduk. Bu işlemin çıktısı da aşağıdaki gibidir.
Lpad Bilgisi=0000000001=ACCESS$ Rpad Bilgisi=1000000000=ACCESS$ --- Lpad Bilgisi=0000000002=ALERT_QT Rpad Bilgisi=2000000000=ALERT_QT --- Lpad Bilgisi=0000000003=APPLY$_CONF_HDLR_COLUMNS Rpad Bilgisi=3000000000=APPLY$_CONF_HDLR_COLUMNS --- Lpad Bilgisi=0000000004=APPLY$_CONSTRAINT_COLUMNS Rpad Bilgisi=4000000000=APPLY$_CONSTRAINT_COLUMNS --- Lpad Bilgisi=0000000005=APPLY$_DEST_OBJ Rpad Bilgisi=5000000000=APPLY$_DEST_OBJ --- Lpad Bilgisi=0000000006=APPLY$_DEST_OBJ_CMAP Rpad Bilgisi=6000000000=APPLY$_DEST_OBJ_CMAP --- Lpad Bilgisi=0000000007=APPLY$_DEST_OBJ_OPS Rpad Bilgisi=7000000000=APPLY$_DEST_OBJ_OPS --- Lpad Bilgisi=0000000008=APPLY$_ERROR Rpad Bilgisi=8000000000=APPLY$_ERROR --- Lpad Bilgisi=0000000009=APPLY$_ERROR_HANDLER Rpad Bilgisi=9000000000=APPLY$_ERROR_HANDLER --- Lpad Bilgisi=0000000010=APPLY$_ERROR_TXN Rpad Bilgisi=1000000000=APPLY$_ERROR_TXN
Kolay gelsin.



