Du bør ikke skrive kode for at undslippe strengen. Det faktum, at du skal undslippe strengen, betyder, at du gør noget forkert.
Hvis du bruger bindevariabler i din INSERT
sætning, vil der ikke være behov for at undslippe strengen, når der er et omstrejfende enkelt citat. Der vil heller ikke være behov for at forsøge at identificere SQL-injektionsangreb i strengen, hvilket er et stort sikkerhedsproblem, hvis du ikke bruger bindevariabler. Og du vil ikke tvinge Oracle til at parse forespørgslen, hver gang den udføres, hvilket er afgørende for systemets ydeevne.
Hvis proceduren du taler om er skrevet i PL/SQL, vil den automatisk bruge bindevariabler. Hvis du gætter på kolonnenavnene og antager, at du bruger en sekvens til at generere din primære nøgle, ville du have noget som dette
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;
Andre frontend-sprog vil have forskellige tilgange til at bruge bindevariabler. Hvis du f.eks. skriver Java ved hjælp af JDBC, skal du oprette en PreparedStatement
og kald derefter passende setXXX
metoder, dvs.
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();