Database
 sql >> Base de Dados >  >> RDS >> Database

Inserir DML com variável de vinculação:Cláusula USING da instrução imediata de execução

Inserir DML com variável de vinculação:por quê?


Vamos direto ao assunto! As duas maiores vantagens das variáveis ​​de ligação são a segurança contra injeções de SQL e o aprimoramento de desempenho, reduzindo a análise difícil. Devido a essas vantagens, o uso de variáveis ​​de ligação em seu código não é apenas sugerido, mas também recomendado.

Não seria uma cereja no topo do bolo se pudéssemos descobrir uma maneira de usar Bind Variables com SQL dinâmico nativo? Se você está se perguntando isso, meus queridos amigos, você está no lugar certo, pois vamos fazer exatamente isso neste blog.

O que é uma variável de vinculação?


Podemos definir a variável de ligação como a variável que criamos no SQL*Plus e depois referenciamos no PL/SQL. Além disso, podemos declarar uma variável Bind em qualquer lugar do ambiente host. Portanto, as variáveis ​​de ligação também são conhecidas como variáveis ​​de host.

Você pode ler mais sobre variáveis ​​de ligação no tutorial PL/SQL 6 aqui.

Como usar uma variável de vinculação com SQL dinâmico nativo?


Para usar a variável de ligação no SQL dinâmico, precisamos da ajuda de “Usando cláusula ” da instrução Executar Imediato.

O que é esta cláusula de uso da instrução Execute Immediate?


No SQL estático tivemos que especificar o valor da variável bind após a execução do programa PL/SQL. Enquanto no SQL dinâmico temos que mencionar os valores de antemão para todas as variáveis ​​de ligação. Os mesmos que são usados ​​na instrução SQL que desejamos executar dinamicamente usando Execute Immediate.

Portanto, para especificar os valores de todas as variáveis ​​de ligação, utilizamos a cláusula USING da instrução Execute Immediate. Ao aplicar a cláusula 'USING', listamos todos os valores para cada variável de ligação usada na instrução SQL que desejamos executar dinamicamente.

Agora que aprendemos o que são variáveis ​​de ligação e Using Clause of Execute Immediate vamos fazer um exemplo.

Exemplo de execução imediata com cláusula de uso


Para a demonstração vamos inserir os dados em uma tabela. E para isso usaremos a instrução Execute Immediate. Além disso, para melhorar a segurança e o desempenho, usaremos a variável de ligação com o Insert DML.

Para fazer isso, primeiro precisaremos de uma tabela na qual podemos inserir os dados. Portanto, vamos criar rapidamente um. E como sempre, manterei o código o mais simples possível para facilitar a compreensão do conceito.

Etapa 1:crie uma tabela

CREATE TABLE stu_info(
    student_name    VARCHAR2 (20)
);

Etapa 2:preparar a declaração DML


É uma boa prática de programação preparar sua instrução SQL, que você deseja executar usando execute imediatamente, antecipadamente. Dessa forma, você reduzirá as chances de erros de sintaxe.

A restrição para escrever DML para Execute Immediate permanecerá a mesma que para a instrução DDL. Semelhante à instrução DDL A instrução DML não deve ser terminada com um ponto e vírgula. Portanto, tendo isso em mente, vamos escrever a instrução INSERT.
INSERT INTO stu_info (student_name) VALUES (:stu_name)

No padrão INSERT DML, geralmente escrevemos os dados na cláusula de parênteses de valores. Além disso, na execução, esses dados serão inseridos na coluna correspondente. Mas como você pode ver, aqui usamos uma variável de ligação “:stu_name” em vez de codificar qualquer valor específico para inserir na tabela.

Etapa 3:escreva o código PL/SQL


A última etapa do ciclo é executar INSERT DML com a variável de ligação aplicando a cláusula USING de Execute Immediate Statement of Native Dynamic SQL.
SET SERVEROUTPUT ON;
DECLARE
    sql_smt VARCHAR2 (150);
BEGIN
    sql_smt :=  'INSERT INTO stu_info (student_name) VALUES (:stu_name)';
    EXECUTE IMMEDIATE sql_smt USING 'Steve';
END;
/

Vamos entender o que acontecerá na execução deste bloco PL/SQL. Ao executar este programa, a engine PL/SQL substituirá este valor por ‘Steve’ no lugar da variável bind :stu_name e então executará o INSERT DML que inserirá este valor na tabela mencionada.

Além disso, existem algumas coisas que você precisa cuidar ao escrever o programa PL/SQL acima em sua extremidade.
  1. Certifique-se de colocar a instrução INSERT DML ou Any SQL que você deseja executar usando Execute Immediate entre aspas simples. Além disso, lembre-se de encerrar a instrução de atribuição (linha 5), ​​bem como a instrução Execute Immediate, com um ponto e vírgula.
  2. O valor que você está atribuindo à sua variável de ligação por meio da cláusula USING deve ser o mesmo ou compatível com o tipo de dados da coluna da tabela na qual você está inserindo. Por exemplo, no nosso caso estamos inserindo o nome ‘Steve’ que é uma string de caracteres na coluna student_name da tabela stu_info que é do tipo de dados Varchar2. O tipo de dados de caractere é muito compatível com o tipo de dados Varchar2.

Através deste programa aprendemos duas coisas muito importantes.

  1. Como usar um INSERT DML com Execute Immediate of Dynamic SQL e
  2. Como aplicar a cláusula USING para atribuir valores à variável de ligação usada na consulta SQL que desejamos executar dinamicamente.



Além disso, certifique-se de verificar o vídeo, pois discuti como lidar com o erro “ORA-01008:Not All Variables Bound”. Aposto que você não quer perder a solução para esse erro, pois é muito importante do ponto de vista da certificação do banco de dados oracle.

Além disso, fique atento, pois no próximo tutorial aprenderemos como lidar com várias variáveis ​​de ligação aplicando a cláusula Using de execute instant no Oracle Database.

Espero que você tenha aprendido algo valioso com este blog. Enquanto isso, compartilhe com seus amigos em seu Facebook, twitter, WhatsApp ou qualquer meio que achar conveniente. Além disso, inscreva-se no meu canal do YouTube para tutoriais mais rápidos e interessantes. Obrigado e tenha um ótimo dia!