Uzunluğu belirtilmemiş CLOB tipinde bir alana boş string (zero-length string) atamak istidiğimde "ORA-01084: OCI çağrısı içinde geçersiz bağımsız değişken" hatası oluştu.
Biraz kurcaladıktan sonra CLOB tipinde alanların boş string kabul etmediğini; ya NULL ya da en az bir karakterlik veri girilmesi gerektiğini öğrendim. PL/SQL Developer ve TOAD
üzerinden SQL cümlesi yazarak da denedim, .NET tarafından da denedim. Şöyle ki:
CREATE TABLE SCM.TEST
(
test_id INTEGER NOT NULL,
test_adi DATE,
test_aciklama VARCHAR2(150 BYTE),
clob_alan CLOB
);
Tabloyu oluşturduktan sonra aşağıdaki SQL cümlesini eklemeyi denedim:
INSERT INTO TEST VALUES(S_TEST.NEXTVAL,'test_adi degeri','test_aciklama degeri','');
Girdiğim satırın CLOB alanını kontrol ettiğimde boş string yerine NULL değerinin girilmiş olduğunu gördüm. IDE'ler, INSERT cümlesini oci.dll'ye yönlendirmeden önce CLOB alan için girilen boş string değerini NULL değerine çeviriyor. Biz bu çevrimi .NET tarafında yapmadığımız için sorun yaşadık. ORACLE'deki prosedüre parametreleri yollayan kod bloğunda gerekli düzenlemeyi yaptım ve sorun çözüldü.
DÜZELTME: Boş string (Zero-length string) IDE'ler tarafından NULL'a çevrilmiyor. Oracle'nin VARCHAR2 ve CLOB alanlardaki yorumlayış biçimi bu şekildeymiş. Tom Kyte'nin AskTom adlı sitesinde konuya açıklık getirilmiş. Ayrıntılar için tıklayınız.