2013-07-16 35 views
5

ben ama bir şey eksik olmadığını bilmiyorum ne yapıyorum geçerli:PL/SQL: sayısal ya da değer hatası: karakter dizesi tampon çok küçük% Rowtype

Bir Rowtype döndüren bir işlevi var

myTable_rec myTable%ROWTYPE; 

ama prosedürde çağırdığınızda: my prosedürde sonra

FUNCTION myFunc(pChar CHAR) RETURN myTable%ROWTYPE AS 
    myTable_rec myTable%ROWTYPE; 
    BEGIN 
    SELECT col1, col2, col3 
    INTO myTable_rec.col1 
     , myTable_rec.col2 
     , myTable_rec.col3 
    FROM myTable 
    WHERE col4 = pChar; 

    RETURN(myTable_rec); 
    END B001_03; 
(yukarıdaki fonksiyon çağırır), ben ilan

... 
myTable_rec := myFunc(someChar); 
... 

Ben

ORA-06502: PL/SQL: numeric or value error: character string buffer too small 

aynı masaya DAN ve AYNI veri türü OF olması gerekiyordu alanlar (benim küçük anlayış gibi) değil misin olsun?

DÜZENLEME: SELECT * ve her çalışmayı denedim. Burada kesinlikle bir şey eksik. Sadece olduğunu bilmiyorum.

+0

Neden Char yerine Varchar2'yi kullanmıyorsunuz? –

+0

wow gerçekten sorunu çözdü. Bir cevap koyun ve en iyi cevap olarak işaretleyeceğim efendim. Beni gerçekten şaşırtan şey, "someChar" ifadesinin aynı tablodan VE sütuntan sorgulanmasıdır. Bu nedenle, aynı veri türü ve sütun uzunluğuna sahip olmasını bekledim. – Incognito

cevap

5

Sorun, sabit bir uzunluktaki dize olan Char kullanarak kaynaklandığından eminim. Nerede bulunduğunuzdan emin değilsiniz, fakat kodunuzda bir yerde bir N veya bir varchar2 dizesini N uzunluğunu bir M'nin N aralığına yerleştirmeye çalışın. Burada M> N.

3

.Bu hata .Net kodumla Oracle SP'ye erişirken bu hatayı alıyordum . Birisi bu hatayla karşı karşıyaysa, giriş/çıkış parametresinin boyutunu belirterek için sorunun çözülmesine yardımcı olur.

Örnek kod şöyledir:

OracleParameter oparamProjectId = mycom.Parameters.Add (. "P_open_flag", OracleDbType varchar2); oparamProjectId.Direction = ParameterDirection.Output; oparamProjectId.Size = 100;

+0

Mükemmel! Uzun bir süre sonra hatayı bulmaya çalıştıktan sonra niçin olduğunu biliyorum. Çok teşekkür ederim! –

İlgili konular