Je zou geen code moeten schrijven om aan de string te ontsnappen. Het feit dat je aan de string moet ontsnappen, houdt in dat je iets verkeerd doet.
Als u bindvariabelen gebruikt in uw INSERT
statement, is het niet nodig om aan de tekenreeks te ontsnappen als er een verdwaald enkel aanhalingsteken is. Het is ook niet nodig om te proberen SQL-injectie-aanvallen in de tekenreeks te identificeren, wat een enorm beveiligingsprobleem is als u geen bindvariabelen gebruikt. En u dwingt Oracle niet om de query elke keer dat deze wordt uitgevoerd te ontleden, wat essentieel is voor de systeemprestaties.
Als de procedure waar je het over hebt geschreven is in PL/SQL, zal het automatisch bindvariabelen gebruiken. Als je de kolomnamen raadt en ervan uitgaat dat je een reeks gebruikt om je primaire sleutel te genereren, krijg je zoiets als dit
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;
Andere front-endtalen hebben verschillende benaderingen voor het gebruik van bindvariabelen. Als u bijvoorbeeld Java schrijft met JDBC, maakt u een PreparedStatement
en bel dan de juiste setXXX
methoden, d.w.z.
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();