Oracle PL/SQL Inserir, Atualizar, Excluir e Selecionar em [Exemplo]

โšก Resumo Inteligente

instruรงรตes SQL dentro Oracle PL/SQL lida com todas as tarefas de manipulaรงรฃo de dados, permitindo que um bloco insira, atualize, exclua e selecione linhas diretamente. Os comandos INSERT, UPDATE, DELETE e SELECT INTO movem e recuperam dados dentro do banco de dados.

  • โš™๏ธ Comandos DML: INSERT, UPDATE, DELETE e SELECT INTO executam todas as tarefas de manipulaรงรฃo de dados dentro de um bloco PL/SQL.
  • โž• Inserรงรฃo de dados: O comando INSERT INTO adiciona linhas a partir de valores explรญcitos ou diretamente de outra tabela usando um comando SELECT.
  • ๐Ÿ”„ Atualizaรงรฃo de dados: O comando UPDATE com SET altera os valores das colunas, enquanto uma clรกusula WHERE opcional limita as linhas afetadas.
  • ๐Ÿ—‘๏ธ Exclusรฃo de dados: O comando DELETE remove os registros correspondentes e a omissรฃo da clรกusula WHERE limpa a tabela inteira.
  • ๐ŸŽฏ Selecione em: A consulta SELECT INTO deve retornar exatamente uma linha, ou Oracle Gera erros NO_DATA_FOUND ou TOO_MANY_ROWS.
  • ๐Ÿค– Assistรชncia de IA: Assistentes de IA, como o GitHub Copilot, elaboram rascunhos de blocos DML e sinalizam a ausรชncia de uma clรกusula WHERE ou COMMIT.

Oracle PL/SQL Insert Update Delete Select Into

Transaรงรตes DML em PL/SQL

DML significa Linguagem de Manipulaรงรฃo de Dados, o grupo de linguagens de programaรงรฃo que utiliza linguagens de programaรงรฃo para manipular dados. SQL comandos que alteram os dados armazenados em uma tabela. Dentro de um Bloco PL/SQLEsses comandos executam o trabalho de manipulaรงรฃo, enquanto o PL/SQL fornece a lรณgica subjacente. O DML lida com as operaรงรตes abaixo.

  • Inserรงรฃo de dados
  • Atualizaรงรฃo de dados
  • Exclusรฃo de dados
  • Seleรงรฃo de Dados

Em PL/SQL, a manipulaรงรฃo de dados รฉ realizada somente por meio de comandos SQL.

Inserรงรฃo de dados

Em PL/SQL, as linhas sรฃo adicionadas a uma tabela com o comando SQL INSERT INTO. Este comando recebe como entrada o nome da tabela, as colunas de destino e os valores das colunas, e entรฃo insere o valor na tabela base.

O comando INSERT tambรฉm pode obter valores diretamente de outra tabela usando uma instruรงรฃo SELECT, em vez de fornecer os valores de cada coluna. Por meio de uma instruรงรฃo SELECT, รฉ possรญvel inserir de uma sรณ vez tantas linhas quantas a tabela de origem contiver.

Sintaxe:

BEGIN
INSERT INTO <table_name>(<column1>,<column2>,...,<column_n>)
VALUES(<value1>,<value2>,...,<value_n>);
END;

A sintaxe acima mostra o comando INSERT INTO. O nome da tabela e os valores sรฃo campos obrigatรณrios, enquanto os nomes das colunas sรฃo opcionais quando a instruรงรฃo INSERT fornece valores para todas as colunas da tabela. A palavra-chave VALUES รฉ obrigatรณria quando os valores sรฃo fornecidos separadamente, como mostrado acima.

Sintaxe:

BEGIN
INSERT INTO <table_name>(<column1>,<column2>,...,<column_n>)
SELECT <column1>,<column2>,...,<column_n> FROM <table_name2>;
END;

Esta segunda forma de INSERT INTO extrai os valores diretamente de Utilizando o comando SELECT. A palavra-chave VALUES nรฃo deve estar presente aqui, pois os valores nรฃo sรฃo fornecidos separadamente.

Atualizaรงรฃo de dados

Atualizar dados significa alterar o valor de uma coluna em uma linha existente. Isso รฉ feito com a instruรงรฃo UPDATE, que recebe como entrada o nome da tabela, o nome da coluna e o novo valor, e atualiza os dados.

Sintaxe:

BEGIN
UPDATE <table_name>
SET <column1>=<value1>,<column2>=<value2>,<column_n>=<value_n>
WHERE <condition that uniquely identifies the record that needs to be updated>;
END;

A sintaxe acima mostra a instruรงรฃo UPDATE. A palavra-chave SET instrui o mecanismo PL/SQL a atualizar a coluna com o valor fornecido. A clรกusula WHERE รฉ opcional; se nรฃo for fornecida, o valor da coluna mencionada serรก atualizado em toda a tabela.

Exclusรฃo de dados

A exclusรฃo de dados significa remover um registro completo da tabela do banco de dados. O comando DELETE รฉ usado para essa finalidade.

Sintaxe:

BEGIN
DELETE FROM <table_name>
WHERE <condition that uniquely identifies the record that needs to be deleted>;
END;

A sintaxe acima mostra o comando DELETE. A palavra-chave FROM รฉ opcional e, com ou sem a clรกusula FROM, o comando se comporta da mesma maneira. A clรกusula WHERE tambรฉm รฉ opcional; se nรฃo for fornecida, a tabela inteira serรก esvaziada.

Seleรงรฃo de Dados

A projeรงรฃo de dados, ou busca de dados, significa recuperar os dados necessรกrios da tabela do banco de dados. Isso รฉ feito com o comando SELECT juntamente com a clรกusula INTO. O comando SELECT busca os valores do banco de dados e a clรกusula INTO atribui esses valores ร s variรกveis โ€‹โ€‹locais do bloco PL/SQL.

Os pontos abaixo devem ser considerados ao usar uma instruรงรฃo SELECT com INTO:

  • Uma instruรงรฃo SELECT deve retornar apenas um registro ao usar a clรกusula INTO, pois uma variรกvel sรณ pode armazenar um valor. Se o SELECT retornar mais de uma linha, o exceรงรฃo TOO_MANY_ROWS รฉ gerado.
  • A instruรงรฃo SELECT atribui o valor ร  variรกvel na clรกusula INTO, portanto, precisa de pelo menos um registro para preencher o valor. Se nรฃo encontrar nenhum registro, a exceรงรฃo NO_DATA_FOUND serรก lanรงada.
  • O nรบmero de colunas e seus tipos de dados na clรกusula SELECT deve corresponder ao nรบmero de variรกveis โ€‹โ€‹e seus tipos de dados na clรกusula INTO.
  • Os valores sรฃo buscados e preenchidos na mesma ordem mencionada na instruรงรฃo.
  • A clรกusula WHERE รฉ opcional e permite que vocรช defina mais restriรงรตes sobre os registros que serรฃo recuperados.
  • Uma instruรงรฃo SELECT pode ser usada na condiรงรฃo WHERE de outras instruรงรตes DML para definir os valores das condiรงรตes.
  • Uma instruรงรฃo SELECT usada dentro de instruรงรตes INSERT, UPDATE ou DELETE nรฃo deve ter uma clรกusula INTO, pois ela nรฃo preenche nenhuma variรกvel nesses casos.

Sintaxe:

BEGIN
SELECT <column1>,...,<column_n> INTO <variable1>,...,<variable_n>
FROM <table_name>
WHERE <condition to fetch the required records>;
END;

A sintaxe acima mostra o comando SELECT-INTO. A palavra-chave FROM รฉ obrigatรณria e identifica a tabela da qual os dados precisam ser obtidos. A clรกusula WHERE รฉ opcional; se nรฃo for fornecida, os dados de toda a tabela serรฃo obtidos.

1 exemplo: Neste exemplo, veremos como realizar operaรงรตes DML em PL/SQL. Inseriremos os quatro registros abaixo na tabela emp.

EMP_NAME EMP_NO SALรRIO MANAGER
BBB 1000 25000 AAA
XXX 1001 10000 BBB
AAAA 1002 10000 BBB
ZZZ 1003 7500 BBB

Em seguida, atualizaremos o salรกrio de 'XXX' para 15000, excluiremos o registro do funcionรกrio 'ZZZ' e, finalmente, projetaremos os detalhes do funcionรกrio 'XXX'.

A captura de tela abaixo mostra o bloco PL/SQL completo usado neste exemplo.

Oracle Bloco PL/SQL executando operaรงรตes de inserรงรฃo, atualizaรงรฃo, exclusรฃo e seleรงรฃo na tabela emp.

DECLARE
l_emp_name VARCHAR2(250);
l_emp_no NUMBER;
l_salary NUMBER;
l_manager VARCHAR2(250);
BEGIN
INSERT INTO emp(emp_name,emp_no,salary,manager)
VALUES('BBB',1000,25000,'AAA');
INSERT INTO emp(emp_name,emp_no,salary,manager)
VALUES('XXX',1001,10000,'BBB');
INSERT INTO emp(emp_name,emp_no,salary,manager)
VALUES('YYY',1002,10000,'BBB');
INSERT INTO emp(emp_name,emp_no,salary,manager)
VALUES('ZZZ',1003,7500,'BBB');
COMMIT;
Dbms_output.put_line('Values Inserted');
UPDATE EMP
SET salary=15000
WHERE emp_name='XXX';
COMMIT;
Dbms_output.put_line('Values Updated');
DELETE emp WHERE emp_name='ZZZ';
COMMIT;
Dbms_output.put_line('Values Deleted');
SELECT emp_name,emp_no,salary,manager INTO l_emp_name,l_emp_no,l_salary,l_manager FROM emp WHERE emp_name='XXX';
Dbms_output.put_line('Employee Detail');
Dbms_output.put_line('Employee Name:'||l_emp_name);
Dbms_output.put_line('Employee Number:'||l_emp_no);
Dbms_output.put_line('Employee Salary:'||l_salary);
Dbms_output.put_line('Employee Manager Name:'||l_manager);
END;
/

Saรญda:

Values Inserted
Values Updated
Values Deleted
Employee Detail
Employee Name:XXX
Employee Number:1001
Employee Salary:15000
Employee Manager Name:BBB

Code Explicaรงรฃo:

  • Code linhas 2-5: Declarando as variรกveis.
  • Code linhas 7-14: Inserindo os registros na tabela emp.
  • Code linha 15: Confirmando as transaรงรตes de inserรงรฃo.
  • Code linhas 17-19: Atualizando o salรกrio do funcionรกrio 'XXX' para 15000.
  • Code linha 20: Confirmando a transaรงรฃo de atualizaรงรฃo.
  • Code linha 22: Excluindo o registro de 'ZZZ'.
  • Code linha 23: Confirmando a transaรงรฃo de exclusรฃo.
  • Code linha 25: Selecionando o registro de 'XXX' e preenchendo as variรกveis โ€‹โ€‹l_emp_name, l_emp_no, l_salary e l_manager.
  • Code linhas 26-30: Exibindo os valores dos registros obtidos.

Perguntas Frequentes

Nรฃo. O PL/SQL estรกtico nรฃo pode executar DDL diretamente. Construa a instruรงรฃo como uma string e execute-a com EXECUTAR IMEDIATAMENTE, que lida com as operaรงรตes CREATE, ALTER e DROP em tempo de execuรงรฃo.

Uma instruรงรฃo SELECT INTO deve retornar exatamente uma linha. Para ler vรกrias linhas, use um operador explรญcito. cursor com um loop FETCH ou BULK COLLECT em uma coleรงรฃo.

DELETE รฉ uma operaรงรฃo DML: remove as linhas selecionadas com uma clรกusula WHERE e pode ser revertida. TRUNCATE รฉ uma operaรงรฃo DDL: apaga todas as linhas instantaneamente, confirma automaticamente as alteraรงรตes e nรฃo pode ser desfeita.

Sim. As alteraรงรตes de INSERIR, ATUALIZAR e EXCLUIR permanecem na sua sessรฃo atรฉ que vocรช as cancele. COMPRARPL/SQL nรฃo realiza commits automรกticos. Use COMMIT para salvar ou ROLLBACK para descartar.

O comando MERGE realiza um upsert โ€” atualiza as linhas que correspondem a uma condiรงรฃo de junรงรฃo e insere as que nรฃo correspondem โ€” em uma รบnica instruรงรฃo, em vez de usar comandos UPDATE e INSERT separados.

A clรกusula RETURNING INTO captura os valores das colunas das linhas afetadas por um INSERT, UPDATE ou DELETE e os armazena em variรกveis, evitando uma consulta SELECT adicional para ler os dados alterados.

Sim. Travas deslizantes portรกteis Copiloto do GitHub O programa elabora blocos INSERT, UPDATE, DELETE e SELECT INTO a partir de um breve comentรกrio, sugere variรกveis โ€‹โ€‹de ligaรงรฃo e completa listas de colunas, embora vocรช deva revisar a lรณgica primeiro.

Assistentes de IA examinam o DML em busca de clรกusulas WHERE ausentes, COMMITs nรฃo executados e concatenaรงรตes inseguras, sugerindo correรงรตes e explicando os erros. Essa revisรฃo por aprendizado de mรกquina detecta alteraรงรตes arriscadas antes que cheguem ร  produรงรฃo.

Resuma esta postagem com: