Oracle
 sql >> Base de données >  >> RDS >> Oracle

Erreur lors de l'insertion de données entre guillemets simples

Vous ne devriez pas écrire de code pour échapper à la chaîne. Le fait que vous deviez échapper la chaîne implique que vous faites quelque chose de mal.

Si vous utilisez des variables de liaison dans votre INSERT , il n'y aura pas besoin d'échapper la chaîne lorsqu'il y a un guillemet simple errant. Il ne sera également pas nécessaire d'essayer d'identifier les attaques par injection SQL dans la chaîne, ce qui constitue un énorme problème de sécurité si vous n'utilisez pas de variables de liaison. Et vous n'obligerez pas Oracle à analyser la requête à chaque fois qu'elle est exécutée, ce qui est essentiel pour les performances du système.

Si la procédure dont vous parlez est écrite en PL/SQL, elle utilisera automatiquement des variables liées. En devinant les noms de colonnes et en supposant que vous utilisez une séquence pour générer votre clé primaire, vous auriez quelque chose comme ça

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;

D'autres langages frontaux auront des approches différentes pour utiliser les variables de liaison. Si vous écrivez Java en utilisant JDBC, par exemple, vous créerez un PreparedStatement puis appelez le setXXX approprié méthodes, c'est-à-dire

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();