Çözüldü:Alınan hata: ORA-01460 / C# dizi oluşturma, veritabanında REGEXP_SUBSTR ile ayırma.

Kodla Büyü

sfym

Seçkin Üye
Seçkin Üye
Mesajlar
384
.
.

Oracle ile split işlemi ( REGEXP_SUBSTR kullanımı):

SELECT REGEXP_SUBSTR (personelTcler,'[^@]+',1,LEVEL) AS TC_NO
FROM DUAL
CONNECT BY REGEXP_SUBSTR (personelTcler, '[^@]+', 1, LEVEL) IS NOT NULL
personelTcler: bölünecek tc stringi
'[^@] : @ işaretine göre ayrılacak

Fonksiyon çalıştığında sonuçlar TC_NO isminde kolona sahip, tablo şeklinde dönecektir.

TC_NO
11222222226
11222222226
11222222226
...

REGEXP_SUBSTR kullanımında alınan hata:

ORA-01460: uygulanamayacak veya anlaşılamayan bir dönüştürme istendi.


Bunun sebebi oracle REGEXP_SUBSTR fonksiyonuna işlem yapabileceğinden daha uzun string gönderilmesi.

Örneğin, bizim elimizde 1000 kişilik Tc listesi olsun. Bunu
11222222226@11222222226@11222222226@11222222226@11222222226@11222222226@.....
şeklinde 1000 tanesini birleştirip gönderirsek hata veriyor.

Çözüm:

C# ile veritabanına gönderilecek string i 300'erli gruplara bölerek gönderiyoruz.
Tabi bu işlem Oracle tarafında da yapılabilir. Ama biz C# tarafında bölümledik.


Kod:
                    //Örneğin:  100 adet tc için işlem yapalım: 100*11=1100+100adet @ =1200 karakter
                    // Biz 300 personel sınırı koyduk. Yani 3600 karakter. 4800 gönderdiğinizde REGEXP_SUBSTR yukardaki hatayı verir.      

string[] personelTcleriDizi = new string[100];
int diziDegeri = 0;

                    if (personelTcleriDizi[diziDegeri] != null)
                    {
                        if (personelTcleriDizi[diziDegeri].Length > 3600)
                            diziDegeri += 1;
                       
                        personelTcleriDizi[diziDegeri] += personelTcleri;

                    }
                    else
                    {
                        personelTcleriDizi[diziDegeri] += personelTcleri;
                    }

//diziye aldığımız tclerimizi Veritabanına gönderiyoruz
for (int x = 0; x <= diziDegeri; x++)
{
   veritabananiGonder( personelTcleriDizi[x]);
}
 
Geri
Üst