Başlangıç > Database, Forms, Oracle, PL/SQL, Reports > pl/sql ve oracle forms da lpad ve rpad kullanımı

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.

Reklamlar
  1. Henüz yorum yapılmamış.
  1. No trackbacks yet.

Bir Cevap Yazın

Aşağıya bilgilerinizi girin veya oturum açmak için bir simgeye tıklayın:

WordPress.com Logosu

WordPress.com hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap / Değiştir )

Twitter resmi

Twitter hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap / Değiştir )

Facebook fotoğrafı

Facebook hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap / Değiştir )

Google+ fotoğrafı

Google+ hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap / Değiştir )

Connecting to %s

%d blogcu bunu beğendi: