Você não deve escrever código para escapar da string. O fato de você precisar escapar da string implica que você está fazendo algo errado.
Se você estiver usando variáveis de ligação em seu
INSERT
declaração, não haverá necessidade de escapar da string quando houver uma aspa simples perdida. Também não haverá necessidade de tentar identificar ataques de injeção de SQL na string, o que é um grande problema de segurança se você não estiver usando variáveis de ligação. E você não estará forçando o Oracle a analisar a consulta toda vez que ela for executada, o que é crítico para o desempenho do sistema. Se o procedimento sobre o qual você está falando estiver escrito em PL/SQL, ele usará variáveis de ligação automaticamente. Adivinhando os nomes das colunas e assumindo que você está usando uma sequência para gerar sua chave primária, você teria algo assim
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;
Outras linguagens de front-end terão abordagens diferentes para usar variáveis de ligação. Se você estiver escrevendo Java usando JDBC, por exemplo, você criaria um
PreparedStatement
e, em seguida, chame setXXX
apropriado métodos, ou seja, 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();