Verileri bir dizi biçiminde farklı veri türleri arasında dönüştürmek Oracle'da genellikle basit bir işlemdir, ancak bazı durumlar diğerlerinden biraz daha zordur. Bunlardan biri, clob'u varchar2'ye dönüştürmek için Oracle kullandığınızda ortaya çıkar; varchar2 sütununda maksimum 4.000 karakter bulunurken clob büyük miktarda karakter depolayabilir veri. Yine de, dbms_lob substr yöntemini veya to_char'ı kullanarak ve maksimum bir boyut belirleyerek hedefinize ulaşabilirsiniz.
CLOB ve VARCHAR2 Açıklaması
CLOB (ya da halk dilinde "clob") "karakter büyük nesne"nin kısaltmasıdır ve 4 GB'a kadar veri depolayabilir. DB2 ve Oracle dahil olmak üzere çeşitli veritabanı sistemleri tarafından kullanılır. CLOB, çok miktarda veri depolamanız gerektiğinde kullanışlıdır, ancak boyutun kendisi bazı durumlarda sorunlara neden olabilir. Bu nedenle, işlemleri gerçekleştirmeden önce Oracle CLOB'dan daha yönetilebilir boyutta bir dize biçimine dönüştürme genellikle iyi bir yaklaşımdır.
Günün Videosu
VARCHAR2 formatı, genişletilmiş bir maksimum dize boyutu kullanmadığınız sürece, genellikle 4.000 bayta kadar daha küçük miktarlarda veri depolar; bu durumda, 32.767 bayta kadar çıkabilir. Tek baytlık bir karakter kümesi için genellikle bir sütunda en fazla 4.000 karakter alabilirsiniz. Bu iki veri formatının maksimum boyutları arasındaki tutarsızlık, dönüştürme sırasında sorunların ortaya çıktığı yerdir.
dbms_lob substr Yöntemi
Bir clob dizesini varchar2'ye dönüştürmek için SQL *Plus programınızı açın. Gerçekleştirmeniz gereken dönüştürmenin sözdizimi şöyledir:
Tablodan dbms_lob.substr( clob_column, for_how_many_bytes, from_what_byte ) SEÇİN
Burada parantez içindeki değerler, sonunda "tablo" ile birlikte değiştirmeniz gereken değerlerdir. Bunlar, sütuna ("clob_column") ve birlikte çalıştığınız tabloya karşılık gelir. "for_how_many_bytes" size kaç baytlık veriyi dönüştürmek istediğinizi belirleme fırsatı verir ve "from_what_byte" bir başlangıç noktası belirlemenize olanak tanır.
Dolayısıyla, "vergiler" adlı bir tablonuz ve "net_pay" adlı bir alanınız varsa ve ilkinden başlayarak 4.000 bayt istediğinizi varsayarsak, şunu girersiniz:
Vergilerden dbms_lob.substr (net_pay, 4000, 1) SEÇİN
Dizeyi varchar2 formatına dönüştürmek için.
TO_CHAR Yöntemi
Aynı amaca ulaşmak için TO_CHAR komutunu çok benzer bir sözdizimi ile de kullanabilirsiniz:
Tablodan CHAR'A (SUBSTR (clob_column, 0,3999)) SEÇİN
Burada başlangıç ve bitiş baytları 0 ve 3999 olarak belirtilir (başlangıçta 4.000 karakterlik bir dize için baştan), ancak "clob_column" ve "table" alanları tam olarak aynı şekilde kullanılır. önceki. Yani, aynı örnekte şunu girebilirsiniz:
Vergilerden TO_CHAR(SUBSTR (net_pay, 0,3999)) SEÇİN
Temel olarak, işlemi tek bir adımda tamamlamak yerine, bu, daha büyük dizeden bir alt dize çekmek için SUBSTR komutunu kullanır ve ardından dönüştürmeyi işlemek için "to_char" kullanır. Söz konusu clob sütununda 4.000 bayttan az bilgi varsa, bir alt dize belirtmek yerine sütunun adını to_char'dan sonra parantez içinde girebilirsiniz.