sql >> Base de Datos >  >> RDS >> Oracle

Inserción y actualización basadas en registros en Oracle

También puede usar registros que se basen en declaraciones %ROWTYPE contra la tabla en la que se realizan la inserción y la actualización, o en un registro TYPE explícito que sea compatible con la estructura de la tabla.

Ejemplo de inserción basada en registro:

DECLARE
my_book books%ROWTYPE;
BEGIN
my_book.isbn :='1-123456-123-1';
my_book.title :='Fox Infotech Blogs';
mi_libro.resumen :='Ejemplos de Fox';
mi_libro.autor :='V. Kapoor';
my_book.page_count :=300;
INSERT INTO books VALUES my_book;
END;
/
Observe que no incluye paréntesis alrededor del especificador de registro . Si usa este formato:

INSERTAR EN libros VALORES (mi_libro); -- Entre paréntesis, ¡NO VÁLIDO!

entonces obtendrá un ORA-00947:excepción de valores insuficientes, ya que el programa espera una expresión separada para cada columna de la tabla.

Ejemplo de actualización basada en registros:

También puede realizar actualizaciones de una fila completa utilizando un registro. El siguiente ejemplo actualiza una fila en la tabla de libros con un registro %ROWTYPE. Observe que uso la palabra clave ROW para indicar que estoy actualizando toda la fila con un registro:

DECLARE
my_book books%ROWTYPE;
BEGIN
my_book.isbn :='1-123456-123-1';
my_book.title :='Fox Infotech Blogs';
mi_libro.resumen :='Ejemplos de Fox';
mi_libro.autor :='V. Kapoor';
mi_libro.page_count :=300;

ACTUALIZAR libros
SET ROW =my_book
WHERE isbn =my_book.isbn;
END;
/
Existen algunas restricciones en las actualizaciones basadas en registros:

Debe actualizar una fila completa con la sintaxis ROW. No puede actualizar un subconjunto de columnas (aunque es posible que esto se admita en versiones futuras). Cualquier campo cuyos valores se dejen en NULL resultará en un valor NULL asignado a la columna correspondiente.
No puede realizar una actualización usando una subconsulta.
Y, en caso de que se lo pregunte, no puede crear una columna de tabla llamada FILA.