Nie powinieneś pisać kodu, aby uciec od ciągu. Fakt, że musisz zmienić ciąg znaków, oznacza, że robisz coś złego.
Jeśli używasz zmiennych bind w INSERT
instrukcji, nie będzie potrzeby ucieczki ciągu, gdy istnieje zabłąkany pojedynczy cudzysłów. Nie będzie również potrzeby identyfikowania ataków typu SQL injection w ciągu, co stanowi ogromny problem z bezpieczeństwem, jeśli nie używasz zmiennych wiązania. I nie będziesz zmuszać Oracle do analizowania zapytania za każdym razem, gdy jest ono wykonywane, co ma krytyczne znaczenie dla wydajności systemu.
Jeśli procedura, o której mówisz, jest napisana w PL/SQL, automatycznie użyje zmiennych wiązania. Zgadując nazwy kolumn i zakładając, że używasz sekwencji do generowania klucza podstawowego, otrzymasz coś takiego
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;
Inne języki frontonu będą miały różne podejścia do używania zmiennych wiązania. Jeśli na przykład piszesz w Javie używając JDBC, utworzysz PreparedStatement
a następnie wywołaj odpowiedni setXXX
metody, tj.
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();