Вы не должны писать код для экранирования строки. Тот факт, что вам нужно экранировать строку, означает, что вы делаете что-то не так.
Если вы используете переменные связывания в вашем операторе INSERT
, вам не нужно будет экранировать строку, если есть одиночная кавычка. Также не нужно будет пытаться идентифицировать атаки SQL-инъекций в строке, что является серьезной проблемой безопасности, если вы не используете переменные связывания. И вы не будете заставлять Oracle анализировать запрос каждый раз, когда он выполняется, что крайне важно для производительности системы.
Если процедура, о которой вы говорите, написана на PL / SQL, она будет автоматически использовать переменные связывания. Догадываясь по именам столбцов и предполагая, что вы используете последовательность для генерации вашего первичного ключа, у вас будет что-то вроде этого
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;
Другие языки интерфейса будут иметь разные подходы к использованию переменных связывания. Например, если вы пишете Java с использованием JDBC, вы должны создать PreparedStatement
, а затем вызвать соответствующие методы setXXX
, т.е.
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();