Neměli byste psát kód pro únik řetězce. Skutečnost, že potřebujete uniknout z řetězce, znamená, že děláte něco špatně.
Pokud v INSERT
používáte proměnné vazby příkazu, nebude nutné uvádět řetězec, pokud se vyskytne zbloudilá jednoduchá uvozovka. Nebude také nutné zkoušet identifikovat útoky SQL injection v řetězci, což je velký bezpečnostní problém, pokud nepoužíváte vazebné proměnné. A nebudete nutit Oracle, aby analyzoval dotaz pokaždé, když je spuštěn, což je kritické pro výkon systému.
Pokud je procedura, o které mluvíte, napsána v PL/SQL, použije proměnné bind automaticky. Pokud byste uhádli názvy sloupců a předpokládali, že ke generování primárního klíče používáte sekvenci, měli byste něco takového
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;
Jiné front-end jazyky budou mít různé přístupy k použití vazebných proměnných. Pokud například píšete Java pomocí JDBC, vytvořili byste PreparedStatement
a poté zavolejte odpovídající 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();