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

Neste tutorial, aprenderemos como usar SQL em PL/SQL. SQL รฉ o componente real que cuida da busca e atualizaรงรฃo dos dados no banco de dados, enquanto PL/SQL รฉ o componente que processa esses dados. Alรฉm disso, neste artigo, tambรฉm discutiremos como combinar o SQL dentro do bloco PL/SQL.

Transaรงรตes DML em PL/SQL

DML significa Linguagem de manipulaรงรฃo de dados. Essas instruรงรตes sรฃo usadas principalmente para realizar a atividade de manipulaรงรฃo. Ele 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, podemos fazer a manipulaรงรฃo de dados apenas usando comandos SQL.

Inserรงรฃo de dados

Em PL/SQL, podemos inserir os dados em qualquer tabela usando o comando SQL INSERT INTO. Este comando pegarรก o nome da tabela, a coluna da tabela e os valores da coluna como entrada e inserirรก o valor na tabela base.

O comando INSERT tambรฉm pode obter os valores diretamente de outra tabela usando a instruรงรฃo 'SELECT' em vez de fornecer os valores para cada coluna. Atravรฉs da instruรงรฃo 'SELECT', podemos inserir quantas linhas a tabela base contรฉm.

Sintaxe:

BEGIN
  INSERT INTO <table_name>(<column1 >,<column2>,...<column_n>)
     VALUES(<valuel><value2>,...:<value_n>);
END;
  • A sintaxe acima mostra o comando INSERT INTO. O nome e os valores da tabela sรฃo campos obrigatรณrios, enquanto os nomes das colunas nรฃo sรฃo obrigatรณrios se as instruรงรตes de inserรงรฃo tiverem valores para todas as colunas da tabela.
  • A palavra-chave 'VALUES' รฉ obrigatรณria se os valores forem fornecidos separadamente conforme mostrado acima.

Sintaxe:

BEGIN
  INSERT INTO <table_name>(<columnl>,<column2>,...,<column_n>)
     SELECT <columnl>,<column2>,.. <column_n> FROM <table_name2>;
END;
  • A sintaxe acima mostra o comando INSERT INTO que obtรฉm os valores diretamente do usando o comando SELECIONAR.
  • A palavra-chave 'VALUES' nรฃo deve estar presente neste caso porque os valores nรฃo sรฃo fornecidos separadamente.

Atualizaรงรฃo de dados

Atualizaรงรฃo de dados significa simplesmente uma atualizaรงรฃo do valor de qualquer coluna da tabela. Isso pode ser feito usando a instruรงรฃo 'UPDATE'. Esta instruรงรฃo usa o nome da tabela, o nome da coluna e o valor como entrada e atualiza os dados.

Sintaxe:

BEGIN	
  UPDATE <table_name>
  SET <columnl>=<VALUE1>,<column2>=<value2>,<column_n>=<value_n> 
  WHERE <condition that uniquely identifies the record that needs to be update>; 
END;
  • A sintaxe acima mostra o UPDATE. A palavra-chave 'SET' instrui esse mecanismo PL/SQL a atualizar o valor da coluna com o valor fornecido.
  • A clรกusula 'WHERE' รฉ opcional. Caso esta clรกusula nรฃo seja fornecida, o valor da coluna mencionada em toda a tabela serรก atualizado.

Exclusรฃo de dados

Exclusรฃo de dados significa excluir um registro completo da tabela do banco de dados. O comando 'DELETE' รฉ usado para esta finalidade.

Sintaxe:

BEGIN
  DELETE
  FROM
  <table_name>
  WHERE <condition that uniquely identifies the record that needs to be update>; 
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' รฉ opcional. Se esta clรกusula nรฃo for fornecida, toda a tabela serรก excluรญda.

Seleรงรฃo de Dados

Projeรงรฃo/busca de dados significa recuperar os dados necessรกrios da tabela do banco de dados. Isto pode ser conseguido usando o comando 'SELECT' com a clรกusula 'INTO'. O comando 'SELECT' irรก buscar os valores do banco de dados, e a clรกusula 'INTO' atribuirรก esses valores ร  variรกvel local do Bloco PL/SQL.

Abaixo estรฃo os pontos que precisam ser considerados na instruรงรฃo 'SELECT'.

  • A instruรงรฃo 'SELECT' deve retornar apenas um registro enquanto usa a clรกusula 'INTO', pois uma variรกvel pode conter apenas um valor. Se a instruรงรฃo 'SELECT' retornar mais de um valor, a exceรงรฃo 'TOO_MANY_ROWS' serรก gerada.
  • A instruรงรฃo 'SELECT' atribuirรก o valor ร  variรกvel na clรกusula 'INTO', portanto, รฉ necessรกrio obter pelo menos um registro da tabela para preencher o valor. Se nรฃo obtiver nenhum registro, a exceรงรฃo 'NO_DATA_FOUND' serรก gerada.
  • O nรบmero de colunas e seus tipos de dados na clรกusula 'SELECT' devem 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 ter mais restriรงรตes nos registros que serรฃo buscados.
  • A instruรงรฃo 'SELECT' pode ser usada na condiรงรฃo 'WHERE' de outras instruรงรตes DML para definir os valores das condiรงรตes.
  • A instruรงรฃo 'SELECT' ao usar as instruรงรตes 'INSERT', 'UPDATE', 'DELETE' nรฃo deve ter a clรกusula 'INTO', pois nรฃo preencherรก nenhuma variรกvel nesses casos.

Sintaxe:

BEGIN
  SELECT <columnl>,..<column_n> INTO <vanable 1 >,. .<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 o nome da tabela da qual os dados precisam ser buscados.
  • A clรกusula 'WHERE' รฉ opcional. Se esta clรกusula nรฃo for fornecida, os dados de toda a tabela serรฃo buscados.

Exemplo 1: Neste exemplo, veremos como realizar operaรงรตes DML em PL/SQL. Vamos inserir 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

A seguir vamos atualizar o salรกrio de 'XXX' para 15000, e vamos deletar o cadastro de funcionรกrio 'ZZZ'. Por fim, vamos projetar os dados do funcionรกrio โ€˜XXXโ€™.

Seleรงรฃo de dados em PL/SQL

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,managed 
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(โ€˜Emplovee 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

Explicaรงรฃo do cรณdigo:

  • Linha de cรณdigo 2-5: Declarando a variรกvel.
  • Linha de cรณdigo 7-14: Inserindo os registros na tabela emp.
  • Linha de cรณdigo 15: Confirmando as transaรงรตes de inserรงรฃo.
  • Linha de cรณdigo 17-19: Atualizando o salรกrio do funcionรกrio 'XXX' para 15000
  • Linha de cรณdigo 20: Confirmando a transaรงรฃo de atualizaรงรฃo.
  • Linha de cรณdigo 22: Excluindo o registro de 'ZZZ'
  • Linha de cรณdigo 23: Confirmando a transaรงรฃo de exclusรฃo.
  • Linha de cรณdigo 25-27: Selecionando o registro de 'XXX' e preenchendo a variรกvel l_emp_name, l_emp_no, l_salary, l_manager.
  • Linha de cรณdigo 28-32: Exibindo o valor dos registros buscados.

Resuma esta postagem com: