Не трябва да пишете код, за да избегнете низа. Фактът, че трябва да избегнете низа, означава, че правите нещо нередно.
Ако използвате променливи за свързване във вашия 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();