Arşiv

Posts Tagged ‘insert’

pl/sql de sqlerrm kullanımı

Merhaba,
Pl/sql ortamında ya da Oracle forms ortamında yazdığımız programlarda çoğu zaman Oracle hatası alırız. Doğru bir hata yönetimimiz olmaz ise yani exception satırlarımızda yeterli bilgilendirme yapmaz isek bu hataları bulmak bazı durumlarda çok zor olabilir. Bu gibi durumlarda hatanın meydana geldiği scripti ve hatanın ne olduğu konusundaki detaylı bilgiyi Oracle’ın SQLERRM komutu ile rahatça öğrenebiliriz.Tabi bu durumu daha net anlamak için örneklerimize bir göz atalım.
Örnek olarak bir tabloya insert işlemi yapalım ve bu insert işlemi sırasında alabileceğimiz hataları SQLERRM kullanmadan görelim. Daha sonraki örneğimizde de SQLERRM komutu ile gelen uyarı/hata mesajını inceleyelim.
Aşağıdaki örneğimizde kullandığımız tablonun id bilgisi not null bir alan ve bu alana null veri kayıt etmeye çalıştığımızda scriptin exception satırına düşeceğiz.

DECLARE
BEGIN
  BEGIN
    INSERT INTO sqlerrm_example_table
      (set_id,
       set_aciklama)
    VALUES
      (NULL,
       'SQLERRM Kullanılmayan Insert');
  EXCEPTION
    WHEN OTHERS THEN
      dbms_output.put_line('Kayıt İşleminde Bir Hata Oldu');
  END;
END;

Script içerisinde görüldüğü gibi exception satırından bize aşağıdaki uyarı gelecektir.
Kayıt İşleminde Bir Hata Oldu

Ama bu script yerine aşağıdaki gibi SQLERRM komutunu kullandığımız scriptler hazırladığımızda hatayı bulmamız ve hastanın sebebini öğrenmemiz daha kolay olur.
DECLARE
BEGIN
  BEGIN
    INSERT INTO sqlerrm_example_table
      (set_id,
       set_aciklama)
    VALUES
      (NULL,
       'SQLERRM Kullanılan Insert');
  EXCEPTION
    WHEN OTHERS THEN
      dbms_output.put_line('Kayıt İşleminde Bir Hata Oldu' || chr(13) || SQLERRM);
  END;
END;

Mevcut scriptimizi yukarıdaki gibi güncellediğimizde ise aşağıdaki gibi daha sağlıklı ve hata hakkında daha fazla bilgi veren bir mesaj elde etmiş oluruz.
Kayıt İşleminde Bir Hata Oldu
ORA-01400: ("SQLERRM_EXAMPLE_TABLE"."SET_ID") içine NULL eklenemez

Bu uyarıyı aldığımız zaman insert satırımızdaki NULL olarak gönderdiğimiz id bilgisine değer verdiğimizde sorunsuz kayıt işlemimizi yapabiliriz.
DECLARE
BEGIN
  BEGIN
    INSERT INTO sqlerrm_example_table
      (set_id,
       set_aciklama)
    VALUES
      (1,
       'SQLERRM ve Id Bilgisi Kullanılan Insert');
  EXCEPTION
    WHEN OTHERS THEN
      dbms_output.put_line('Kayıt İşleminde Bir Hata Oldu' || chr(13) || SQLERRM);
  END;
END;

Bu script ile sorunsuz olarak kayıt işlemimi yaptığımıza göre tabloya select atıp kayıt sonucumuzu görebiliriz.
SELECT * FROM sqlerrm_example_table;

İşte bu select sonucunda sorunsuz olarak tabloya kayıt ettiğimiz veri karşımızda.

SET_ID SET_ACIKLAMA
1 SQLERRM ve Id Bilgisi Kullanılan Insert

Bu örneğimizde sadece insert işlemi üzerinde SQLERRM komutunu kullandık. Bu komut yazmış olduğumuz tüm scriptlerimiz için kullanılabilinir. Select , update , insert işlemlerinde de SQLERRM komutu rahatlıkla kullanılabilinir.
Kolay gelsin.

ora-01400:cannot insert null into hatası

Merhaba veri tabanında oluşturduğumuz bir tabloya kayıt eklemeye çalıştığımıza boş olmaması gereken bir alana boş veri eklemeye çalıştığımızda ora-01400 hatası alırız.
Örneğin aşağıdaki gibi bir tablo oluşturduğumuz varsayalım.

CREATE TABLE ora_1400_test
(
  ora_id NUMBER(12) NOT NULL,
  ora_text VARCHAR2(100)
);

Bu tabloya aşağıdaki gibi bir insert scriptinden bir veri eklemeye çalıştığımızada ora-01400 hatası alırız.
INSERT INTO ora_1400_test
  (ora_id,
   ora_text)
VALUES
  (NULL,
   'Ora-01400 Text');

Çünkü tabloyu oluştururken ora_id bilgisi not null bir alan olarak belirlendiği için bu alana null veri kayıt edemeyiz.Ama scripti aşağıdaki gibi değiştirirsek sorunsuz olarak bu veriyi kayıt edebiliriz.
INSERT INTO ora_1400_test
  (ora_id,
   ora_text)
VALUES
  (1400,
   'Ora-01400 Text');

Categories: Hata Etiketler:, , , , , , ,

pl/sql de insert into returning kullanımı

Merhaba pl/sql de bir insert işleminden sonra insert edilen kayıtlardan geri bildirim olarak bir ya da birden fazla değer almamız gerekebilir. Bu gibi durumlar için insert aşamasında returning işlemi kullanılır. Örnek olarak aşağıdaki script ile tabloya bir gün kayıt işlemi yaptık ve returning komutu ile kayıt edilen gün bilgisi geri aldık ve dbms_output ile yazdırma işlemi yapmış olduk.

DECLARE
  days VARCHAR2(20);
BEGIN
  INSERT INTO returning_example
    (re_id,
     re_days)
  VALUES
    ('1',
     'Pazartesi')
  RETURNING re_days INTO days;
  dbms_output.put_line(days);
END;

Bu kod satırı ile istenilen işlem geliştirilebilinir.İstenilir ise returning komutu ile tabloya insert edilen bir kolon ya da tüm kolon bilgileri geri alınabilinir. Bu tarz kullanımlar çoğunlukla insert işleminde sequence den gelen id gibi bilgileri almak için kullanılır.

pl/sql insert ve ora-00001 hatası

PL/SQL de insert yaparken “ora-00001 unique constraint” hastası almamak için aşağıdaki gibi bir script yazılabilinir.

BEGIN
  INSERT INTO table_1
    (column_1,
     column_2,
     column_3)
  VALUES
    (value_1,
     value_2,
     value_3);
EXCEPTION
  WHEN dup_val_on_index THEN
    NULL;
END;

Takip Et

Get every new post delivered to your Inbox.

Join 62 other followers