2015-07-21 33 views
9

Bir db2 (v10) veritabanında bir CLOB(2000000) alanım var ve basit bir UPDATE sorgusunu, her bir "foo" ifadesinin "baaz" olarak değiştirilmesi için çalıştırmak istiyorum. alanın içeriğini 32k daha sonra olduğu içinBir CLOB sütununda (db2) karakterlerin değiştirilmesi

, aşağıdaki hatayı olsun:

"{some char data from field}" is too long.. SQLCODE=-433, SQLSTATE=22001 

nasıl değerler yerine?

GÜNCELLEME: sorgu oldu (kolay test için SELECT'in dönüştü GÜNCELLEME) Aşağıdaki: (

SELECT REPLACE(my_clob_column, 'foo', 'baaz') FROM my_table WHERE id = 10726 

GÜNCELLEME 2 mustaccio belirttiği gibi, REPLACECLOB alanlarda çalışmıyor veya en az VARCHAR'a girilen veriyi kullanmadan - bu durumda veri boyutu 32k'dan daha fazla olduğu için benim durumumda mümkün değildir - soru şu: REPLACE işlevini akutlaştırmak için alternatif bir yol bulmakla ilgili CLOB alanları için allity.

sayesinde krisy

+0

Çalıştığınız gerçek bildirimi göstermek isteyebilirsiniz. Ayrıca, bu DB2 z/OS için mi? (Bu sürüm 10 olan tek platform) – mustaccio

+0

Soruyu – krisy

+0

sorgusuyla güncelleştirildi 'REPLACE 'işlevi' VARCHAR'ı kabul eder ve döndürür, bu nedenle açıkça 'CLOB' sütunlarıyla çalışmak için kullanamazsınız. – mustaccio

cevap

0

Bu durumda geçerli emin değilim: DB2, SYSIBM.REPLACE ve SYSFUN.REPLACE sunduğu işlevleri DEĞİŞTİRİN 2 farklı vardır. SYSFUN içindeki REPLACE sürümü CLOB'ları kabul eder ve 1 MByte'ye kadar olan değerleri destekler. Değerlerinizin daha uzun olması durumunda, kendi (SQL-tabanlı?) Fonksiyonunuzu yazmanız gerekecektir.

BTW: Ben bir SQL sorgusu ile bu hiçbir şekilde bulduk beri,

+0

Cevabınız için teşekkür ederiz! Alanlarım 1Mb'den (yaklaşık 3-4Mb) daha büyük – krisy

1

Son olarak "değerlerini (akım yolu)" yürüterek fonksiyon çözünürlüğünü kontrol edebilirsiniz, ben onun lob içeriği düzenlerken, tablo ihraç sona erdi Not Defteri'nde ++ ve tabloyu yeniden içe aktarın.