Forum
Merhaba;
Kullandığım ERP programında daha önce almadığım bir hata ile karşı karşıyayım. Problem anladığım kadarıyla ORA-01861: sabit değer format dizesiyle eşleşmiyor
ORA-06512: konum satır 15 diye çevirdim kendimce. Fakat çözüm için kodları kurcalağımda bir sonuç elde edemedim. Tahminim karakter boyutunu aştığımızı düşünüyorum(varchar2 2000 kullanılıyor).
Konuyu nasıl halledebilirim? Aldığım hatanın başlangıç kodlarını aşağıda belirttim.
CREATE OR REPLACE PACKAGE BODY TRSHIP_UTIL_API IS
PROCEDURE Connect_Co_Line (
order_no_ IN VARCHAR2,
line_no_ IN VARCHAR2,
rel_no_ IN VARCHAR2,
line_item_no_ IN NUMBER,
contract_ IN VARCHAR2,
ship_no_ IN NUMBER,
party_code_ IN VARCHAR2,
delivery_address_id_ IN VARCHAR2,
party_type_ IN VARCHAR2,
qty_to_connect_ IN NUMBER )
IS
attr_ VARCHAR2(2000);
info_ VARCHAR2(2000);
objid_ VARCHAR2(2000);
objversion_ VARCHAR2(2000);
is_exist_ NUMBER;
Merhaba, daha önce almadığınıza göre ya güncelleme oldu, yada daha önce girilmeyen istisna bir değer girildi-giriliyor, veya bölgesel ayarlarda bir değişim söz konusu olabilir.
Bu hata tarihin hatalı formatlanması sonucu oluşur genelde.
Örnek: SELECT
to_date(
'20121508'
,
'yyyy/mm/dd'
)
FROM
dual
--ORA-01861: literal does not match format string
Eğer ERP (ifs sanırım) ye ait çekirdek bir procedure ise İleride tekrar yaşamamak için ERP destekle çözülmesini sağlamak daha doğru olabilir.
Eğer hatayı tesbit etmek istiyorsak, Oracle da hata satır numarası begin ile başlar, 1-Begin.
Yazdığınız kısımda bu yok. (Procedure aldığı paramlarda sınır yok, hatalı tip belirtmede ise satır no vermez zaten oracle.)
Buna göre 15. satıra bakarsanız hatayı anlamanız daha kolay olacaktır.
(Bu arada hatayı olduğu gibi yazmadıysanız eğer; prcodure içinden çağrılan başka bir işlemin 15.satırı olabileceğini de unutmayın.Hatada belirtilir bu.)
Son olarak hatayı anlamanızı kolaylaştırcak ve gelen değeri görebileceğiniz bir yöntem önerelim;
--Bu kısmı değişkenlerin kısmına yerleştiriyoruz.
Hata Varchar2(500);
Islemkodu Varchar2(50);
--Herhangi bir işlemden sonra..
Islemkodu:='1';
...
--Herhangi bir işlemden sonra..
Islemkodu:='2';
--Bu kısmı procdure end in hemen üstüne yerleştiriyoruz.
-- Oluşan Hata Gösteriliyor.
Exception
When OTHERS Then
Hata := Sqlerrm;
--Dilerseniz hatayı ve hangi adımda olduğunu bir tabloya yazabilirsiniz.Kod kapalı durumda..
--Eğer procedurde for loop tarzı bir döngü var ve hata bunun içindeki bir adımda oluyorsa,
--döngü içinde hangi kodda hata olduğunu görmek için bunuda stringe dahil ediyoruz aşağıda
--döngü yoksa "||' Devam Eden Kod:' || xdevamedenkod" kısmının çıkarabilirsiniz.
--Insert Into log_table values('İşlem Kodu: ' || Islemkodu ||' Devam Eden Kod:' || xdevamedenkod || ' , PROCEDURE HATASI : ' || Hata,sysdate);
--Commit;
--Eğer manuel tetikleme ile hatayı alabiliyor iseniz, log tabloya yazmanıza gerek olmayabilir.
Raise_Application_Error(-20101, 'İşlem Kodu: ' || Islemkodu ||' Devam Eden Kod:' || xdevamedenkod || ' ,PROCEDURE HATASI : ' || Hata );
Merhaba;
Sorun erp sisteminde sql içinde sonradan derlenmiş bir koddan kaynalanıyormuş.Tarih formatında deyim hatası yapıldığı için bir müşteride çakışma yaşanmış.
İlginiz için çok teşekkür ediyorum.