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.