.
.
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.
.
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]);
}