Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

Erro ao inserir dados com aspas simples entre eles


Você não deve escrever código para escapar da string. O fato de você precisar escapar da string implica que você está fazendo algo errado.

Se você estiver usando variáveis ​​de ligação em seu INSERT declaração, não haverá necessidade de escapar da string quando houver uma aspa simples perdida. Também não haverá necessidade de tentar identificar ataques de injeção de SQL na string, o que é um grande problema de segurança se você não estiver usando variáveis ​​de ligação. E você não estará forçando o Oracle a analisar a consulta toda vez que ela for executada, o que é crítico para o desempenho do sistema.

Se o procedimento sobre o qual você está falando estiver escrito em PL/SQL, ele usará variáveis ​​de ligação automaticamente. Adivinhando os nomes das colunas e assumindo que você está usando uma sequência para gerar sua chave primária, você teria algo assim
CREATE PROCEDURE insert_rtf_clob( p_clob IN NOCOPY CLOB )
AS
BEGIN
  INSERT INTO rtf_clob( rtf_clob_id, rtf_clob_value )
    VALUES( seq_rtf_clob_id.nextval, p_clob );
END;

Outras linguagens de front-end terão abordagens diferentes para usar variáveis ​​de ligação. Se você estiver escrevendo Java usando JDBC, por exemplo, você criaria um PreparedStatement e, em seguida, chame setXXX apropriado métodos, ou seja,
PreparedStatement stmt = conn.prepareStatement( "INSERT INTO rtf_clob VALUES( ?, ? )" );
stmt.setInt( 1, 1 ); // Set column 1 to a value of 1
stmt.setString( 2, someStringVariable ); // Set column 2 to someStringVariable
stmt.executeUpdate();