Convertir de un Varchar en pl/sql que tiene más de 4000 caracteres a un XMLTYPE
Frecuentes
Visto 15,006 veces
2 Respuestas
2
Podemos pasar solo los datos en formato xml para crear una instancia de XMLTYPE y usar CLOB para pasar el valor de la cadena y luego usar la función EXTRACTVALUE para recuperar los datos.
DECLARE
str CLOB;
x XMLTYPE;
y CLOB:='<TEXT>MY STRING</TEXT>';
BEGIN
x:= XMLTYPE.CREATEXML(y);
select to_clob(extractvalue(x,'/TEXT')) into str FROM DUAL;
dbms_output.put_line(str);
END;
Por favor revise los enlaces Ejemplos de XMLTYPE y XMLTYPE Documentación para más ejemplos prácticos
respondido 25 nov., 13:10
0
Si desea seleccionar todo el tipo XML devuelto como Varchar, puede hacer lo siguiente. Aquí estoy seleccionando todo el valor xml.
DECLARE
str VARCHAR2(4000);
x XMLTYPE;
y CLOB:='<TEXT>MY STRING</TEXT>';
BEGIN
x:= XMLTYPE.CREATEXML(y);
str := x.EXTRACT('/').getstringval();
dbms_output.put_line(str);
END;
SALIDA: <TEXT>MY STRING</TEXT>
También puede profundizar en los nodos secundarios como se muestra a continuación.
DECLARE
str VARCHAR2(4000);
x XMLTYPE;
y CLOB:='<PARENT><TEXT>MY STRING</TEXT></PARENT>';
BEGIN
x:= XMLTYPE.CREATEXML(y);
str := x.EXTRACT('PARENT/TEXT').getstringval();
dbms_output.put_line(str);
END;
SALIDA: <TEXT>MY STRING</TEXT>
Finalmente, si solo quieres el valor que puedes hacer.
DECLARE
str VARCHAR2(4000);
x XMLTYPE;
y CLOB:='<PARENT><TEXT>MY STRING</TEXT></PARENT>';
BEGIN
x:= XMLTYPE.CREATEXML(y);
str := x.EXTRACT('PARENT/TEXT/text()').getstringval();
dbms_output.put_line(str);
END;
SALIDA: MY STRING
Respondido el 10 de enero de 18 a las 18:01
No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas sql oracle or haz tu propia pregunta.