Oracle
 sql >> Database >  >> RDS >> Oracle

Errore durante l'inserimento di dati con virgolette singole tra di essi

Non dovresti scrivere codice per sfuggire alla stringa. Il fatto che sia necessario eseguire l'escape della stringa implica che stai facendo qualcosa di sbagliato.

Se stai usando le variabili bind nel tuo INSERT istruzione, non sarà necessario eseguire l'escape della stringa quando è presente una virgoletta singola vagante. Non sarà inoltre necessario cercare di identificare gli attacchi SQL injection nella stringa, il che rappresenta un enorme problema di sicurezza se non si utilizzano variabili di binding. E non costringerai Oracle ad analizzare la query ogni volta che viene eseguita, il che è fondamentale per le prestazioni del sistema.

Se la procedura di cui stai parlando è scritta in PL/SQL, utilizzerà automaticamente le variabili di collegamento. Indovinando i nomi delle colonne e supponendo che stai usando una sequenza per generare la tua chiave primaria, avresti qualcosa del genere

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;

Altri linguaggi front-end avranno approcci diversi all'utilizzo delle variabili di collegamento. Ad esempio, se stai scrivendo Java utilizzando JDBC, creerai un PreparedStatement e quindi chiama il setXXX appropriato metodi, ovvero

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