Sınırlı Oracle yeteneklerine sahip bir yazılım kullanıyoruz. Belirli bir değere sahip olduğundan emin olarak bir CLOB alanını filtrelemem gerekiyor. Normalde, bu yazılımın dışında şöyle bir şey yapardım:
DBMS_LOB.SUBSTR(t.new_value) = 'Y'
Ancak, bu desteklenmiyor, bu yüzden kullanmaya çalışıyorum CAST
yerine. Birçok farklı denemeyi denedim ama şimdiye kadar bulduğum şey bunlar:
Yazılımın yerleşik bir sorgu denetleyicisi / doğrulayıcısı vardır ve bunlar geçersiz olarak gösterilenlerdir:
DBMS_LOB.SUBSTR(t.new_value)
CAST(t.new_value AS VARCHAR2(10))
CAST(t.new_value AS NVARCHAR2(10))
Ancak, doğrulayıcı bunları kabul eder:
CAST(t.new_value AS VARCHAR(10))
CAST(t.new_value AS NVARCHAR(10))
CAST(t.new_value AS CHAR(10))
Ne yazık ki, doğrulayıcı bunların geçmesine izin verse de, veri almak için sorguyu çalıştırırken şunu alıyorum ORA-22835: Buffer too small
kullanırken VARCHAR
veya NVARCHAR
. Ve anladım ORA-25137: Data value out of range
kullanırken CHAR
.
Verileri filtrelerken CLOB alanımın belirli bir değere sahip olup olmadığını kontrol etmenin başka yolları var mı? Değilse, güncel sorunlarımı nasıl düzeltebilirim?
DBMS_LOB.SUBSTR()
yani bunu kullanamam. Sandım kiCAST
dizeyi kesebilir, çünkü bunun için de bir geçici çözüm kullanmak zorunda kaldıkTRUNC
:CAST(CAST(date_field AS VARCHAR(9)) AS DATE)
ve işe yarıyor. Zaman kısmından kurtulur. Bunun için benzer bir şey yapabileceğimizi umuyordum.