Como usar a instrução PL SQL Insert, Update, Delete and Select
how use pl sql insert
Este tutorial explica como usar os comandos PL SQL INSERT, UPDATE, DELETE e SELECT com exemplos de programação:
Neste artigo, continuaremos com PL / SQL series . No Tipos de dados, constantes e variáveis PL / SQL tutorial, aprendemos sobre os tipos de dados, variáveis, constantes e literais do PL SQL em detalhes com a ajuda de exemplos de programação. Aqui, discutiremos as instruções PL SQL DML e como elas funcionam.
Exploraremos os comandos PL SQL INSERT, DELETE, UPDATE e SELECT para manipular dados em tabelas PL / SQL.
Vamos começar a entender a implementação dos comandos INSERT, DELETE, UPDATE e SELECT nas tabelas. Coletivamente, eles são chamados de declarações de linguagem de manipulação de dados (DML).
Comando PL SQL INSERT
A instrução INSERT INTO é usada para inserir dados em uma tabela. É chamado de Linguagem de manipulação de dados . Ele usa o nome da tabela e os nomes das colunas e valores como entradas e executa a inserção de valores na tabela.
Sintaxe:
INSERT INTO <
> VALUES (<>, <>, …..);
O nome da tabela e os valores a serem inseridos são a parte obrigatória da instrução PL SQL INSERT. Opcionalmente, também podemos mencionar os nomes das colunas onde os valores devem ser inseridos.
Criamos a tabela EMPLOYEE com a ajuda da instrução SQL fornecida a seguir:
CREATE TABLE EMPLOYEE ( CODE INT NOT NULL, NAME VARCHAR (15) NOT NULL, AGE INT NOT NULL, PRIMARY KEY (CODE) );
Implementação de código com PL SQL INSERT:
BEGIN INSERT INTO EMPLOYEE VALUES (1, 'FLEX', 34); INSERT INTO EMPLOYEE VALUES (2, 'HARRY', 35); END
A saída do código acima deve ser:
SELECT * from EMPLOYEE;
INSERT INTO SELECT
INSERIR EM TODAS AS COLUNAS
INSERT INTO SELECT é usado para inserir linhas em uma tabela agindo sobre o resultado da instrução SELECT. Pode ser necessário obter uma linha da tabela e inseri-la em uma tabela diferente.
Sintaxe:
INSERT INTO <> (col1, col2, col3) SELECT col1, col2, col3 FROM <> WHERE condition;
O comando INSERT INTO SELECT precisa que os tipos de dados das tabelas de origem e destino sejam os mesmos. No caso de exigirmos a cópia de todas as linhas da tabela de origem para a tabela de destino, podemos omitir a condição WHERE.
Criamos outra tabela chamada MANAGER com a ajuda da instrução SQL fornecida a seguir:
CREATE TABLE MANAGER ( CODE INT NOT NULL, NAME VARCHAR (15) NOT NULL, AGE INT NOT NULL, PRIMARY KEY (CODE) );
Vamos considerar novamente a tabela EMPLOYEE.
Implementação de código com INSERT INTO SELECT .:
BEGIN INSERT INTO MANAGER (CODE, NAME, AGE) SELECT CODE, NAME, AGE FROM EMPLOYEE WHERE CODE = 1; END;
Resultado do código acima:
SELECT * from MANAGER;
INSERIR DADOS PARCIAIS
Também podemos inserir dados parciais em outra tabela. Vamos primeiro criar o MANAGERDETAIL tabela da tabela EMPLOYEE com a consulta abaixo.
CREATE TABLE MANAGERDETAIL AS SELECT * FROM EMPLOYEE WHERE 1 = 0;
Aqui, ONDE 1 = 0 refere-se à primeira coluna da tabela EMPLOYEE que é CODE.
A seguir, usaremos a instrução INSERT INTO SELECT para duplicar os dados da tabela EMPLOYEE para a tabela MANAGERDETAIL.
Implementação de código com INSERT INTO SELECT;
BEGIN INSERT INTO MANAGERDETAIL SELECT CODE, NAME, AGE FROM EMPLOYEE WHERE CODE! = 0 END;
Resultado do código acima:
SELECT * from MANAGERDETAIL;
No exemplo acima, não mencionamos os nomes das colunas no comando INSERT, pois a saída do comando SELECT possui os valores que correspondem às colunas da tabela MANAGERDETAIL. Além disso, incluímos uma condição com a cláusula WHERE.
INSERIR DADOS PARCIAIS E LITERAIS
Podemos inserir dados parciais e valor literal em uma tabela.
Vamos primeiro criar a tabela MANAGERCONTACT com a consulta abaixo:
CREATE TABLE MANAGERCONTACT ( CODE INT NOT NULL, NAME VARCHAR (15) NOT NULL, AGE INT NOT NULL, PRIMARY KEY (CODE) );
Agora, vamos pegar novamente a ajuda da tabela EMPLOYEE e tentar duplicar os dados da tabela EMPLOYEE para a tabela MANAGERCONTACT.
Implementação de código com INSERT INTO:
BEGIN INSERT INTO MANAGERCONTACT (CODE, NAME, AGE) SELECT CODE, NAME, 0 FROM EMPLOYEE; END;
A saída do código acima:
SELECT * from MANAGERCONTACT;
No exemplo acima, obtivemos os valores da tabela EMPLOYEE e também incluímos 0 literal na instrução INSERT, que modificou os valores da coluna AGE para 0 na tabela MANAGERCONTACT.
INSERIR TUDO
Uma instrução INSERT ALL é usada para adicionar mais de uma linha em uma única tabela ou em várias tabelas. Ele também é chamado de comando de várias tabelas e é de dois tipos: condicional e incondicional.
# 1) INSERIR TUDO INCONDICIONAL
Para inserir mais de uma linha em uma tabela, uma instrução INSERT ALL é usada.
Sintaxe:
INSERT ALL INTO <
> (c1, c2, c3) VALUES (v1, v2, v3) INTO <
> (c1, c2, c3) VALUES (v4, v5, v6) INTO <
> (c1, c2, c3) VALUES (v7, v8, v9)
Aqui, c1, c2 e c3 são os nomes das colunas e v1, v2 e v3 são os valores a serem inseridos. Nesse caso, temos que usar valor literal em vez de subconsulta; temos que usar a consulta abaixo:
SELECT * FROM dual;
Criamos a tabela SOCCERPLAYERS com a ajuda da instrução SQL fornecida a seguir:
CREATE TABLE SOCCERPLAYERS ( PLAYERID INT NOT NULL, NAME VARCHAR (15) NOT NULL, COUNTRY VARCHAR (15), PRIMARY KEY (PLAYERID) );
Implementação de código com INSERT ALL:
BEGIN INSERT ALL INTO SOCCERPLAYERS (PLAYERID, NAME, COUNTRY) VALUES (4, 'DANIEL', 'USA') INTO SOCCERPLAYERS (PLAYERID, NAME, COUNTRY) VALUES (8, 'DANNY', 'ITALY') INTO SOCCERPLAYERS (PLAYERID, NAME, COUNTRY) VALUES (7, 'FRANK', 'FRANCE') SELECT 1 FROM dual; END;
A saída do código acima:
SELECT * from SOCCERPLAYERS;
No exemplo acima, três linhas foram inseridas de uma vez em uma tabela com um comando INSERT ALL.
Para inserir mais de uma linha em várias tabelas, uma instrução INSERT ALL é usada.
Sintaxe:
INSERT ALL INTO <> (c1, c2, c3) VALUES (v1, v2, v3) INTO <> (c1, c2, c3) VALUES (v4, v5, v6) INTO <> (c1, c2, c3) VALUES (v7, v8, v9) Subquery;
Aqui, c1, c2 e c3 são os nomes das colunas e v1, v2 e v3 são os valores a serem inseridos. O table_name1, table_name2 e table_name3 são os nomes das tabelas.
# 2) INSERIR TODOS CONDICIONAIS
Uma instrução INSERT ALL pode inserir mais de uma linha nas tabelas dependendo de algumas condições.
Sintaxe:
INSERT (ALL | FIRST) WHEN cond1 THEN INTO table_name1 <> VALUES <> WHEN cond2 THEN INTO table_name2 <> VALUES <> ELSE INTO table_name3 <> VALUES <> Subquery;
A palavra-chave ALL é usada para especificar que todas as condições da cláusula WHERE devem ser executadas. Se uma condição for satisfeita, a cláusula INTO correspondente será executada.
Se a palavra-chave FIRST for usada, para cada linha individual obtida de uma subconsulta, o Oracle executa os critérios na cláusula WHEN de cima para baixo. Depois que uma condição for satisfeita, a cláusula INTO correspondente será executada e pulará para outra cláusula WHEN dessa linha.
Criamos as tabelas VEHICLE, CARS, SMALLCARS e LARGECARS com a ajuda das instruções SQL fornecidas abaixo:
CREATE TABLE VEHICLE ( CARID INT NOT NULL, NAME VARCHAR (15) NOT NULL, COLOR VARCHAR (15), PRIMARY KEY (CARID) );
Insira os valores abaixo na tabela VEÍCULO:
INSERT INTO VEHICLE VALUES (1, 'AUDI', 'RED'); INSERT INTO VEHICLE VALUES (4, 'BMW', 'WHITE'); INSERT INTO VEHICLE VALUES (7, 'KIA', 'GREEN'); CREATE TABLE CARS ( CARID INT NOT NULL, NAME VARCHAR (15) NOT NULL, COLOR VARCHAR (15), PRIMARY KEY (CARID) ); CREATE TABLE SMALLCARS AS SELECT * FROM CARS; CREATE TABLE LARGECARS AS SELECT * FROM CARS;
Implementação de código com INSERT ALL.
BEGIN INSERT ALL WHEN CARID = 1 THEN INTO CARS WHEN CARID = 4 THEN INTO SMALLCARS WHEN CARID = 7 THEN INTO LARGECARS SELECT CARID, NAME, COLOR FROM VEHICLE; END;
A saída do código acima:
SELECT * from CARS;
SELECT * from SMALLCARS;
SELECT * from LARGECARS;
No exemplo acima, uma linha foi inserida em cada uma das três tabelas com base no valor CARDID.
Existem certas restrições com a instrução INSERT ALL:
É usado apenas para inserir valores em tabelas. Não funciona com visualizações ou visualizações materializadas.
Não é capaz de inserir valores em tabelas remotas.
O número de colunas que um comando INSERT INTO pode manipular não deve ser maior que 999.
Uma expressão de coleção de tabela não pode ser utilizada em um comando INSERT de várias tabelas.
Uma subconsulta INSERT de várias tabelas não é capaz de usar uma sequência.
Comando de atualização PL SQL
A instrução UPDATE é usada para modificar os valores em uma tabela. Também é chamado de Linguagem de manipulação de dados . Ele usa os nomes da tabela, coluna e valores como entradas e executa a modificação dos valores na tabela.
Sintaxe:
UPDATE <
> SET <>=<>, <>=<>,… WHERE <>;
A palavra-chave SET é usada para alterar o valor da coluna com o novo valor. Opcionalmente, a palavra-chave WHERE é usada; se omitida, o valor da coluna especificada na tabela completa será modificado.
ATUALIZAR UMA ÚNICA COLUNA DE UMA LINHA
Vamos considerar novamente a tabela EMPLOYEE.
Implementação de código com UPDATE:
BEGIN UPDATE EMPLOYEE SET NAME = 'HENRY' WHERE CODE=1; END;
A saída do código acima:
SELECT * from EMPLOYEE;
ATUALIZAR MÚLTIPLAS COLUNAS DE UMA LINHA
Vamos considerar novamente a tabela EMPLOYEE.
Implementação de código com UPDATE:
BEGIN UPDATE EMPLOYEE SET NAME = 'COMO', AGE = 30 WHERE CODE=2; END;
A saída do código acima:
SELECT * from EMPLOYEE;
ATUALIZAR MÚLTIPLAS LINHAS
Vamos considerar novamente a tabela EMPLOYEE.
Implementação de código com UPDATE:
BEGIN UPDATE EMPLOYEE SET AGE = AGE +1; END;
Resultado do código acima:
SELECT * from EMPLOYEE;
No exemplo acima, a IDADE de todos os funcionários aumentou em 1.
Comando PL SQL Delete
A instrução DELETE é usada para remover um registro inteiro da tabela. Também é chamado de Linguagem de manipulação de dados.
Sintaxe:
DELETE FROM <
> WHERE <>;
A palavra-chave FROM não é obrigatória e uma instrução DELETE deve produzir o mesmo resultado se FROM for adicionado ou não na consulta. Opcionalmente, a palavra-chave WHERE é usada; se omitida, a tabela completa será excluída.
Vamos considerar novamente a tabela MANAGERDETAIL.
Implementação de código com DELETE:
BEGIN DELETE FROM MANAGERDETAIL WHERE CODE > 0; END;
Resultado do código acima:
SELECT * from MANAGERDETAIL;
EXCLUIR LINHAS INTEIRAS DA TABELA
Consideremos novamente a tabela VEÍCULO.
Implementação de código com DELETE:
BEGIN DELETE FROM VEHICLE; END;
Resultado do código acima:
SELECT * from VEHICLE;
Comando de seleção PL SQL
A instrução SELECT é usada para buscar dados do banco de dados. A instrução SELECT INTO é usada para recuperar os valores do banco de dados e armazená-los nas variáveis locais introduzidas pela PL / SQL.
Se usarmos apenas uma instrução SELECT, ela retornará um único registro. No caso de uma instrução SELECT estar buscando vários valores, TOO_MANY_ROWS exceção é lançada por PL / SQL. Ao usar a instrução SELECT INTO, atribuímos pelo menos um valor à variável. No entanto, se nenhum registro for obtido do banco de dados, o NENHUM DADO ENCONTRADO exceção é lançada.
A contagem de colunas e seu tipo deve ser igual à contagem das variáveis e seu tipo na palavra-chave INTO. Os valores são obtidos do banco de dados na mesma sequência definida na instrução SELECT.
A palavra-chave WHERE dentro da instrução SELECT é opcional e nos permite obter registros que atendem a certos critérios. É importante observar que a consulta SELECT com os comandos DELETE, UPDATE e INSERT não possui uma cláusula INTO.
Sintaxe:
SELECT <>, <>, ..<> INTO <>, <>, … <> FROM <
> WHERE <>;
OBTER DADOS DE TODAS AS COLUNAS DE UMA TABELA
Vamos considerar novamente a tabela EMPLOYEE.
Implementação de código com SELECT:
BEGIN SELECT * FROM EMPLOYEE WHERE CODE=1; END;
Resultado do código acima:
Implementação de código com a instrução SELECT lançando uma exceção:
BEGIN SELECT * FROM EMPLOYEE WHERE CODE=2; END;
Resultado do código acima:
A exceção de nenhum dado encontrado é lançada porque a instrução SELECT falhou em obter uma correspondência de linha com a condição especificada, pois não há funcionário com CODE 2 no banco de dados.
OBTER DADOS DE UMA COLUNA DE UMA TABELA
Vamos considerar novamente a tabela EMPLOYEE.
BEGIN SELECT CODE FROM EMPLOYEE; END;
A saída do código acima:
OBTER DADOS DE MÚLTIPLAS COLUNAS DE UMA TABELA
Vamos considerar novamente a tabela EMPLOYEE.
BEGIN SELECT CODE, NAME FROM EMPLOYEE; END;
Resultado do código acima:
No exemplo acima, duas colunas CODE e NAME foram adicionadas à instrução SELECT.
Perguntas e respostas mais frequentes
P # 1) O que é INSERT, UPDATE e DELETE no SQL?
Responda: O INSERT, UPDATE e DELETE são comandos em SQL que ajudam a operar e atualizar dados. A instrução INSERT insere linhas em uma tabela. A instrução DELETE exclui linhas de uma tabela e a instrução UPDATE atualiza os valores nas linhas da tabela.
P # 2) Podemos INSERT, UPDATE e DELETE em vista no SQL?
Responda: Sim, podemos INSERT, UPDATE e DELETE na visualização em SQL. Se a visão se juntou entre as tabelas, só podemos executar as ações INSERT e UPDATE, mas não podemos fazer uma operação DELETE. A instrução DROP é usada para excluir uma visão.
Responda: O INSERT é um DML ou Linguagem de Manipulação de Dados). As outras instruções DML incluem UPDATE, DELETE e assim por diante. A instrução DDL é capaz de criar tabelas, esquema e banco de dados.
P # 4) Podemos usar a consulta de exclusão JOIN IN?
Responda: Sim, podemos usar a instrução INNER JOIN no comando DELETE para excluir linhas de uma tabela.
P # 5) Qual é a diferença entre o comando truncate e delete?
Responda: O TRUNCATE é uma instrução DDL enquanto DELETE é DML. O comando TRUNCATE é capaz de remover a tabela completa. Não mantém a integridade da mesa. A instrução DELETE só pode excluir dados específicos da tabela. Ele também pode incorporar condições para exclusão.
P # 6) O que são DML, DCL e DDL?
Responda: As instruções SQL são dos tipos - DML, DCL e DML.
A linguagem de definição de dados ou DDL inclui comandos como ALTER, DROP, CREATE, RENAME, TRUNCATE e COMMENT. A Linguagem de Manipulação de Dados ou DML inclui comandos como INSERT, DELETE, MERGE, UPDATE, CALL, LOCK TABLE e EXPLAIN PLAN.
O Data Control Language ou DCL inclui comandos como GRANT e REVOKE.
P # 7) O truncamento é mais rápido que a queda?
Responda: Sim, a operação TRUNCATE é mais rápida do que DROP. O comando TRUNCATE exclui apenas os dados da tabela. O comando DROP apaga a estrutura da tabela e os dados da tabela.
Conclusão
Neste tutorial, discutimos em detalhes alguns conceitos básicos dos comandos PL SQL que são essenciais para desenvolver conhecimento sobre eles. Cobrimos os seguintes tópicos listados abaixo: