Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

Inserção e atualização baseada em registro no Oracle

Você também pode usar registros baseados em declarações %ROWTYPE na tabela na qual a inserção e atualização são feitas ou em um registro explícito TYPE compatível com a estrutura da tabela.

Exemplo de inserção baseada em registro:

DECLARE
my_book books%ROWTYPE;
BEGIN
my_book.isbn :='1-123456-123-1';
my_book.title :='Fox Infotech Blogs';
meu_livro.summary :='Exemplos Fox';
meu_livro.autor :='V. Kapoor';
my_book.page_count :=300;
INSERT INTO books VALUES my_book;
END;
/
Observe que você não inclui parênteses ao redor do especificador de registro . Se você usar este formato:

INSERT INTO books VALUES (meu_livro); -- Com parênteses, INVÁLIDO!

então você receberá uma exceção ORA-00947:não há valores suficientes, pois o programa está esperando uma expressão separada para cada coluna na tabela.

Exemplo de atualização baseada em registro:
Você também pode realizar atualizações de uma linha inteira usando um registro. O exemplo a seguir atualiza uma linha na tabela books com um registro %ROWTYPE. Observe que uso a palavra-chave ROW para indicar que estou atualizando a linha inteira com um registro:

DECLARE
my_book books%ROWTYPE;
BEGIN
my_book.isbn :='1-123456-123-1';
my_book.title :='Fox Infotech Blogs';
meu_livro.summary :='Exemplos Fox';
meu_livro.autor :='V. Kapoor';
meu_livro.page_count :=300;

UPDATE books
SET ROW =my_book
WHERE isbn =my_book.isbn;
END;
/
Existem algumas restrições nas atualizações baseadas em registros:
Você deve atualizar uma linha inteira com a sintaxe ROW. Você não pode atualizar um subconjunto de colunas (embora isso possa ser suportado em versões futuras). Quaisquer campos cujos valores sejam deixados NULL resultarão em um valor NULL atribuído à coluna correspondente.
Você não pode realizar uma atualização usando uma subconsulta.
E, caso você esteja se perguntando, você não pode criar uma coluna de tabela chamada ROW.