Los caracteres de varios bytes me han causado mucho dolor.SELECCIONE la mayor cantidad posible de datos de CLOB a VARCHAR2, con caracteres de varios bytes en los datos
¿Alguna sugerencia para este problema?
Tengo un campo CLOB que fuerza contiene algunos caracteres multi-byte, y necesito para seleccionar en SQL y convertir este campo en una cadena de proceso aguas abajo, Actualmente estoy usando:
SELECT DBMS_LOB.SUBSTR(description, 4000, 1) FROM table
Pero el comando 4000 in above tiene la longitud de caracteres, en lugar de bytes. Así que tuve que cambiar a 3000 para manejar cualquier carácter de varios bytes que pudiera haberse infiltrado en los datos, de lo contrario se produciría un error en el tamaño del buffer.
El problema es que para los registros que no contienen caracteres multibyte, podría truncar innecesariamente más datos de los necesarios. (. El 4000 es la limitación de cuerdas, podemos/tuvimos que vivir con eso)
¿Hay una manera de hacer algo equivalente a:
SELECT DBMS_LOB.SUBSTR(description, 4000bytes, 1) FROM table
De esa manera puedo obtener la mayor cantidad de datos a cabo como sea posible.
Nota: No se me permite crear tablas temporales/puntos de vista, no usar PL/SQL, solamente SQL SELECT ...
¿No debería ser "... con SUBSTRB"? (SUBSTRB en lugar de SUBSTR) –
Fuera de interés: ¿Sabe qué sucede si los primeros 3999 caracteres tienen un byte de longitud y el 4000th es de varios bytes? ¿No devolverá un carácter incorrecto en la posición 4000 (ya que interpreta el primer byte del carácter de varios bytes como un carácter de byte único)? –
No Jeffery no funcionará, si 'descripción' contiene caracteres multibyte, el DBMS_LOB.SUBSTR más interno ya golpea un error de búfer de cadena antes de llegar al SUBSTRB. – alchn