plsql de if blogu

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

plsql de if blogu

Mesaj gönderen filiz »

Aşşağıdaki kod derlenip çalıstıgı halde..Bir Alltaki Procedure Çalışmıyor.Derleniyor fakat kayıt eklemiyor..Tek Fark Bir koşul eklenmesi.
Bunu nasıl düzeltebilirm

Kod: Tümünü seç

CREATE OR REPLACE PROCEDURE "CINS_EKLE"(CKOD    IN VARCHAR2,
                                        CACK    IN VARCHAR2,
                                        CBIRIM  IN VARCHAR2,
                                        DURUM   IN NUMBER,
                                        ESKIKOD IN VARCHAR2) IS
  cinskodkontrolu EXCEPTION;
  KODU NUMBER;
BEGIN
  
SELECT COUNT(1) INTO KODU FROM CINSTANIMLAMA WHERE CINSTANIMLAMA.KOD = CKOD; 
      IF KODU > 0 THEN
        RAISE cinskodkontrolu;
      ELSE
        INSERT INTO CINSTANIMLAMA VALUES (CINS_SEQ.NEXTVAL, CKOD, CACK, CBIRIM); 
      END IF; 
 COMMIT;
EXCEPTION
  WHEN cinskodkontrolu then
    raise_application_error(-20001,
                            'Boyle Bir Cins Kodu Vardır.Lütfen Değiştiriniz.');

END;


Kod: Tümünü seç

CREATE OR REPLACE PROCEDURE "CINS_EKLE"(CKOD    IN VARCHAR2,
                                        CACK    IN VARCHAR2,
                                        CBIRIM  IN VARCHAR2,
                                        DURUM   IN NUMBER,
                                        ESKIKOD IN VARCHAR2) IS
  cinskodkontrolu EXCEPTION;
  KODU NUMBER;
BEGIN
  
  IF DURUM = 0 THEN
    BEGIN
      SELECT COUNT(1) INTO KODU FROM CINSTANIMLAMA WHERE CINSTANIMLAMA.KOD = CKOD; 
      IF KODU > 0 THEN
        RAISE cinskodkontrolu;
      ELSE
        INSERT INTO CINSTANIMLAMA VALUES (CINS_SEQ.NEXTVAL, CKOD, CACK, CBIRIM); 
      END IF;  
    END;   
 END IF;
 COMMIT;
EXCEPTION
  WHEN cinskodkontrolu then
    raise_application_error(-20001,
                            'Boyle Bir Cins Kodu Vardır.Lütfen Değiştiriniz.');

END;
doganzorlu
Kıdemli Üye
Mesajlar: 395
Kayıt: 22 Tem 2004 09:15
Konum: İzmir
İletişim:

Mesaj gönderen doganzorlu »

Selam,

IF DURUM = 0

yerine

IF NVL(DURUM,0) = 0

olarak kullanmalisiniz. Parametre null geliyorsa sıfır gibi değerlendirilmez. Bir de kayıt kontrolünü bu şekilde yapmayınız. Bir unique key oluşturup exception içinde dup_key kontrolü yaparak daha kaliteli bir kod oluşturabilirsiniz.

Kolay gelsin,
Doğan Zorlu, İzmir

------------------------
"Bu Kitap'ı sana yalnız şunun için indirdik: Hakkında ayrılığa düştükleri şeyi onlara iyice açıklayasın ve Kitap, iman eden bir topluluk için kılavuz ve rahmet olsun." (NAHL 64)
Cevapla