gecersiz numara hatası

Oracle veritabanı ve SQL komutlarıyla ilgli sorularınızı sorabilirsiniz. Delphi tarafındaki sorularınızı lütfen Programlama forumunda sorunuz.
Cevapla
filiz
Üye
Mesajlar: 82
Kayıt: 24 Ara 2003 08:11
Konum: İzmir

gecersiz numara hatası

Mesaj gönderen filiz » 21 Mar 2006 09:52

merhabalar

aşagıda kontrollu şekilde silme işlemi yapan bir sp var

Kod: Tümünü seç


                (IDLER IN VARCHAR2,
ADET OUT NUMBER
)
IS
 BEGIN
  ADET:=0;
  SELECT COUNT(*) INTO ADET FROM ALTPROJE WHERE ALTPROJE.USTPROJEID IN (IDLER); 
  IF ADET = 0 THEN
    DELETE FROM USTPROJE WHERE ID IN (IDLER);  
  END IF;
COMMIT;
END;

bu sp ye idler parametresine delphi tarafından ornegin '512,534,342' şeklinde bir değer

gidiyor.Ancak o zaman ORA-01722 (geçersiz numara ) hatası alıyorum..tek bir deger gonderirsem

ornegin '534' o zaman sorunsuz siliyor.
ornegin aynı işlemi firebird te yapabiliyorumdum..oracleda nasıl yaparım

Kullanıcı avatarı
rsimsek
Admin
Mesajlar: 4482
Kayıt: 10 Haz 2003 12:48
Konum: İstanbul

Mesaj gönderen rsimsek » 21 Mar 2006 01:18

Tip uyuşmazlığı var :!: TO_CHAR() fonksiyonu ile sol tarafı da string e (CHAR) çevir.

Kod: Tümünü seç

...
SELECT COUNT(*) INTO ADET FROM ALTPROJE WHERE TO_CHAR(ALTPROJE.USTPROJEID) IN (IDLER); 
Bu şekilde bir dene.. :wink:
Bilgiyi paylaşarak artıralım! Hayatı kolaylaştıralım!!

Hakan Can
Üye
Mesajlar: 634
Kayıt: 04 Mar 2005 04:27
Konum: Ankara

Mesaj gönderen Hakan Can » 21 Mar 2006 02:13

Bir kere aynı mantıkla FireBird'de de yapamazsınız.
Zira WHERE clause'unda eğer IN kullanacaksanız ona göre muhtemel değer sayısı kadar parametre tanımlamalısınız.
SP'yi çağırırken de parametrelerden fazlaları için de NULL değeri atamalısınız.
SP'yi şuna benzer şekilde değiştirmelisiniz:

Kod: Tümünü seç

(ID_1 IN VARCHAR2, ID_2 IN VARCHAR2, ID_3 IN VARCHAR2, ID_4 IN VARCHAR2, ID_5 IN VARCHAR2, 
ADET OUT NUMBER 
) 
IS 
 BEGIN 
  ADET:=0; 
  SELECT COUNT(*) INTO ADET FROM ALTPROJE WHERE ALTPROJE.USTPROJEID IN (IDLER); 
  IF ADET = 0 THEN 
    DELETE FROM USTPROJE WHERE ID IN (ID_1, ID_2, ID_3, ID_4, ID_5);  
  END IF; 
COMMIT; 
END; 
Çağırırken de: '512', '534', '342', NULL, NULL gibi çağıracaksınız.

İyi çalışmalar.

filiz
Üye
Mesajlar: 82
Kayıt: 24 Ara 2003 08:11
Konum: İzmir

Mesaj gönderen filiz » 22 Mar 2006 03:01

TO_CHAR() fonksiyonu ile sol tarafı da string e (CHAR) çevirdiğimde derledi ama silme işlemini yapmadı...

id sayısı 1'de olabilir 100'de ...O nedenle sanırım delphi tarafında silme işlemini yapıcam

tşkler

Cevapla