27 Mart 2017

DBMS_RANDOM.VALUE ile Data Hazırlamak ve Round, Trunc, Mod Fonksiyonları(Number Function)

DBMS_RANDOM.VALUE ile Data Hazırlamak ve Round, Trunc, Mod Fonksiyonları(Number Function)

PL/SQL'de DBMS_RANDOM kullanarak Random Data hazırlama ve Sayı üretmeyi anlatacağım. Bunun için bir Stored Procedure yazacağız.

1) DBMS_RANDOM.VALUE ile Data Oluşturmak

Aşağıdaki örneği anlatmak gerekirse, Kişiler kayıt olduğu HR.MEMBERS tablosu içinde Kimlik numaralarının bulunduğu TCKN kolonuna rastgele 11 haneli Datalar oluşturmamız gerekir. Sorgudaki FOR i IN 1..10 LOOP kısmı kaç Row(Satır) oluşturacağımızı söyler. Ben burada 10 adet Data oluşturdum. TRUNC ile virgülden sonrasını aşağıya yuvarladım, DBMS_RANDOM.VALUE kullanarak 11 haneli sayı değerlerini girdim. Sorguyu çalıştırınca Random 10 adet Datanın üretildiğini göreceksiniz.

BEGIN
FOR i IN 1..10 LOOP
INSERT INTO HR.MEMBERS(TCKN)
VALUES (TRUNC(DBMS_RANDOM.VALUE(10000000000,99999999999)));
COMMIT;
END LOOP;
END;

2) Aşağıdaki sorguda HR.DEPARTMENTS tablosundaki kayıtları rastgele bir sırada sıralar. Sorguyu her çalıştırdığınızda sıralamanın değişeceğini göreceksiniz;
SELECT * FROM HR.DEPARTMENTS ORDER BY DBMS_RANDOM.VALUE

Tablodan rastgele bir kayıt getirmek için;
SELECT * FROM
(SELECT * FROM HR.DEPARTMENTS ORDER BY DBMS_RANDOM.VALUE) 
WHERE ROWNUM = 1

3) Round,Trunc ve Mod Fonksiyonları (Number Function)

ROUND: Ondalık(Decimal) değerlerde, seçilen noktadaki sayı 5 ve üzerindeyse bir üst değere yuvarlar, 5 den küçükse bir alt değere yuvarlar. Örnek kullanım;
SELECT ROUND(55.926,2) FROM DUAL

TRUNC: Ondalık(Decimal) değerlerde seçilen noktayı aşağıya yuvarlar. ROUND fonksiyonundan farklı olarak her zaman aşağı yuvarlar. Örnek kullanım;
SELECT TRUNC(55.926,2) FROM DUAL

MOD: Matematikten de bildiğimiz üzere verilen bir değeri belirtilen sayıya bölüp kalan değerini bulur. Burada dikkat edilmesi gereken husus bölüm değilde kalanın sonuç olmasıdır.
SELECT MOD(500, 200) FROM DUAL

Yukarıdaki işlemde 500 bölü 200'den kalan değer 100'dür ve MOD işleminin sonucudur.