FANDOM


XML para pruebas Editar

Éste es el pequeño documento XML que utilizaremos durante las pruebas de este capítulo:

<?xml version="1.0"?>
<reparto>
  <papel>
    <personaje protagonista="si">Rick Deckard</personaje>
    <actor>Harrison Ford</actor>
  </papel>
  <papel>
    <personaje protagonista="no">Roy Batty</personaje>
    <actor>Rutger Hauer</actor>
  </papel>
  <papel>
    <personaje protagonista="no">Rachael</personaje>
    <actor>Sean Young</actor>
  </papel>
</reparto>

Datos de trabajo Editar

Ejecute la siguiente consulta para modificar la tabla de películas:

USE videoteca;

ALTER TABLE
  pelicula
ADD
  reparto TEXT NOT NULL;

Ahora, actualice la tabla de películas:

USE videoteca;

UPDATE
  pelicula
SET
  reparto =
   '<reparto>
      <papel protagonista="si">
        <personaje>Rick Deckard</personaje>
        <actor>Harrisond Ford</actor>
      </papel>
      <papel protagonista="no">
        <personaje>Roy Batty</personaje>
        <actor>Rutger Hauer</actor>
      </papel>
      <papel protagonista="no">
        <personaje>Rachael</personaje>
        <actor>Sean Young</actor>
      </papel>
    </reparto>'
WHERE
  id = 1;

ExtractValue Editar

Directamente sobre una cadena de texto:

SELECT ExtractValue(
 '<papel>
    <personaje>Roy Batty</personaje>
    <actor>Rutger Hauer</actor>
  </papel>',
  '/papel/personaje'
) AS personaje;

Sobre los datos de una tabla:

USE videoteca;

SELECT
  ExtractValue(
    reparto,
    '/reparto/papel/personaje'
  ) AS personajes
FROM
  pelicula
WHERE
  id = 1;

SELECT
  ExtractValue(
    reparto,
    '/reparto/papel/@protagonista'
  ) AS personajes
FROM
  pelicula
WHERE
  id = 1;

Un procedimiento almacenado para que la lista de personajes aparezca separada por comas:

DELIMITER //

DROP PROCEDURE IF EXISTS pa_personajes_obtener;
CREATE PROCEDURE pa_personajes_obtener (
  idpelicula INT
)
BEGIN

DECLARE i INT DEFAULT 1;
DECLARE j INT DEFAULT 0;

DECLARE personajes TEXT DEFAULT '';
DECLARE personaje TEXT DEFAULT '';

SELECT
  ExtractValue(reparto, 'count(/reparto/papel)')
INTO
  j
FROM
  pelicula
WHERE
  id = idpelicula;

WHILE i <= j DO

  SELECT
    ExtractValue(
      reparto,
      '/reparto/papel[$i]/personaje')
  INTO
    personaje
  FROM
    pelicula
  WHERE
    id = idpelicula;

  SELECT
    IF(
      i <> j,
      CONCAT(personaje, ', '),
      personaje)
  INTO personaje;

  SET personajes = CONCAT(personajes, personaje);

  SET i = i + 1;

  END WHILE;  
  
  SELECT personajes;
  
END //

DELIMITER ;

Para utilizarlo:

USE videoteca;

CALL pa_personajes_obtener(1);

UpdateXML Editar

Modificación de valores dentro de un fragmento XML:

USE videoteca;

UPDATE
  pelicula
SET
  reparto = UpdateXML(
    reparto,
    '/reparto/papel[1]/actor',
    '<actor>Harrison Ford</actor>'
  )
WHERE
  id = 1;

¿Ha tenido éxito el cambio?

USE videoteca;

SELECT
  ExtractValue(
    reparto,
    '/reparto/papel[1]/actor'
  ) AS actor
FROM
  pelicula
WHERE
  id = 1;

¡Interferencia de bloqueo de anuncios detectada!


Wikia es un sitio libre de uso que hace dinero de la publicidad. Contamos con una experiencia modificada para los visitantes que utilizan el bloqueo de anuncios

Wikia no es accesible si se han hecho aún más modificaciones. Si se quita el bloqueador de anuncios personalizado, la página cargará como se esperaba.