SP icinde string çözümleme
SP icinde string çözümleme
bir tablonun serino diye bir alanı var ve icinde
'1778746-1605500-1612521-1710298-1756607-1756608'
seklinde kayıtlar var.
elimde POS,LEN SPleri ve substr UDF si var.
bunları kullanarak (yada daha efektif) bu stringleri nasıl row data ya
çeviririm. yani yukardaki satırı parametre olarak girip
1778746
1605500
1612521
1710298
1756607
1756608
seklinde bir sonuc almak istiyorum
'1778746-1605500-1612521-1710298-1756607-1756608'
seklinde kayıtlar var.
elimde POS,LEN SPleri ve substr UDF si var.
bunları kullanarak (yada daha efektif) bu stringleri nasıl row data ya
çeviririm. yani yukardaki satırı parametre olarak girip
1778746
1605500
1612521
1710298
1756607
1756608
seklinde bir sonuc almak istiyorum
ÜŞENME,ERTELEME,VAZGEÇME
Kod: Tümünü seç
CREATE PROCEDURE P_STRING_BICIMLENDIR (
METIN VarChar(355))
returns (
OZELLIK_NO VarChar(10),
DEGER VarChar(10))
AS
declare variable P integer;
declare variable L integer ;
declare variable TMP varchar(100);
begin
select DONEN FROM POS('|',:METIN) into :P;
while(P > 3) do
begin
select substr(:METIN,1,:P-1 ) from RDB$DATABASE into :TMP;
select substr(:METIN,:P+1,strlen(:METIN)) from RDB$DATABASE into :METIN ;
select DONEN FROM POS(';',:TMP) into :L;
select cast(substr(:TMP,1,:L-1)as varchar(10)) from RDB$DATABASE into OZELLIK_NO;
select cast(substr(:TMP,:L+1,strlen(:TMP))as varchar(10)) from RDB$DATABASE into :DEGER ;
select DONEN FROM POS('|',:METIN) into :P;
suspend;
end
end
Selamlar,
Aslında alakalı değil ama bir şey dikkatimi çekti
yerine
kullanılmıyor mu? (Sanırım kullanılması gerekiyor gibime geliyor ama deneyen var mı? Ya da neden SELECT kullanarak yaptınız? Aralarında fark var mı?
Kolay Gelsin
Aslında alakalı değil ama bir şey dikkatimi çekti

Kod: Tümünü seç
select substr(:METIN,1,:P-1 ) from RDB$DATABASE into :TMP;
select substr(:METIN,:P+1,strlen(:METIN)) from RDB$DATABASE into :METIN ;
select DONEN FROM POS(';',:TMP) into :L;
Kod: Tümünü seç
TMP = SubStr(:METIN,1, :P-1) ;
METIN = SubStr(:METIN), :P+1, StrLen(:METIN)) ;
L = POS(';',:TMP) ;
Kolay Gelsin
Kuri Yalnız Jedi
Harbi Özgürlük İçin Pisi http://www.pisilinux.org/
Harbi Özgürlük İçin Pisi http://www.pisilinux.org/
abi SubStr UDF bunda problem yok ama digerleri sp oldugu icin select ile kullanılmadıgında (mesela burada POS)
seklinde hata veriyor.An error was found in the application program input parameters for the SQL statement.
Dynamic SQL Error.
SQL error code = -804.
Function unknown.
POS.
ÜŞENME,ERTELEME,VAZGEÇME
hatta pos u bu şekilde kullanmamak için bugün bi udf araştırması yaptım
http://rfunc.sourceforge.net/
rFunc isimli bu dosya strpos isimli bir fonksiyon içeriyor.
http://rfunc.sourceforge.net/
rFunc isimli bu dosya strpos isimli bir fonksiyon içeriyor.
düzenlenmis hali
iyi guzel calısıyor,sagolasın onur
SEP ile ayırac degistirilebilinir,
ornek olarak 1234-345677-97544-32245 verince
DEGER
1234
345677
97544
32245
elde ediliyor..
Kod: Tümünü seç
CREATE PROCEDURE P_STRING_BICIMLENDIR (
METIN VARCHAR(355))
RETURNS (
DEGER VARCHAR(10))
AS
DECLARE VARIABLE P INTEGER;
DECLARE VARIABLE SEP VARCHAR(1);
BEGIN
SEP='-';
--SON KARAKTER AYIRAC DEGILSE AYIRAC EKLENIR
IF (CAST(SUBSTR(:METIN,STRLEN(METIN),1) AS VARCHAR(1))<>SEP) THEN
METIN=METIN || SEP;
SELECT DONEN FROM POS('-',:METIN) INTO :P;
WHILE(P <> 0) DO
BEGIN
--string ayıklanır
DEGER= SUBSTR(:METIN,1,:P-1 );
--ayıklanan string cıkartılır.
METIN=SUBSTR(:METIN,:P+1,STRLEN(:METIN));
--ayırac tekrar aranır
SELECT DONEN FROM POS('-',:METIN) INTO :P;
SUSPEND;
END
END
SEP ile ayırac degistirilebilinir,
ornek olarak 1234-345677-97544-32245 verince
DEGER
1234
345677
97544
32245
elde ediliyor..
ÜŞENME,ERTELEME,VAZGEÇME
Ben POS'u da bir an UDF olarak görmüşüm
Ehiii tabiki o zaman SELECT kullanmak gerekiyor.
Hadi kolay gele

Hadi kolay gele
Kuri Yalnız Jedi
Harbi Özgürlük İçin Pisi http://www.pisilinux.org/
Harbi Özgürlük İçin Pisi http://www.pisilinux.org/
Merhaba Arkaşlar, tam olmasada bu işlemin tersini yapmak istiyorum.
Bir triger içerisindeki string alanları birleştirip tekbir değişkene aktarmak istiyorum. Delphide kullandımğımız gibi burdada yapmak istedim ama hata verdi heralde yanlış yapıyorum. Yardımcı olabilirmisiniz.
Teşekkür ederim.
Yapmak istediğim olay...
Aciklama = m_no + ' Nolu makbuz ile ' + musteri_adi + musteri_soyadı + ' dan yapilan tahsilat';
Aciklama değişkeni
' 525 nolu makkbuz ile ali veliden yapılan tahsilat' şeklinde olacak.
Bir triger içerisindeki string alanları birleştirip tekbir değişkene aktarmak istiyorum. Delphide kullandımğımız gibi burdada yapmak istedim ama hata verdi heralde yanlış yapıyorum. Yardımcı olabilirmisiniz.
Teşekkür ederim.
Yapmak istediğim olay...
Aciklama = m_no + ' Nolu makbuz ile ' + musteri_adi + musteri_soyadı + ' dan yapilan tahsilat';
Aciklama değişkeni
' 525 nolu makkbuz ile ali veliden yapılan tahsilat' şeklinde olacak.
- sadettinpolat
- Moderator
- Mesajlar: 2131
- Kayıt: 07 Ara 2003 02:51
- Konum: Ankara
- İletişim:
Selamlar,
SQL'de + işareti yok, bunun yerine || kullanılıyor (Arkadaşımız da yanıtını vermiş)
Bu da çoook eskilerden kalma bir nane
Eskilerden + işareti matematiksel bir ifade olarak kullanılırdı ve programlama dillerinin bir kısmı kabul etmezdi. Bunun yerine string birleştirici ifadeler kullanılırdı
(Eski günler aklıma geldi bir an
Örneğin pascal'ın eski versiyonlarında da + yerine Concatanate isimli bir string birleştirici fonksiyon vardı, o kullanılırdı
Kolay Gelsin.
Not : Sadece ek bilgi amaçlı verdim.
SQL'de + işareti yok, bunun yerine || kullanılıyor (Arkadaşımız da yanıtını vermiş)
Bu da çoook eskilerden kalma bir nane



Örneğin pascal'ın eski versiyonlarında da + yerine Concatanate isimli bir string birleştirici fonksiyon vardı, o kullanılırdı

Kolay Gelsin.
Not : Sadece ek bilgi amaçlı verdim.
Kuri Yalnız Jedi
Harbi Özgürlük İçin Pisi http://www.pisilinux.org/
Harbi Özgürlük İçin Pisi http://www.pisilinux.org/