Oracle
 sql >> Datenbank >  >> RDS >> Oracle

Fehler beim Einfügen von Daten mit einfachen Anführungszeichen dazwischen

Sie sollten keinen Code schreiben, um die Zeichenfolge zu maskieren. Die Tatsache, dass Sie den String maskieren müssen, impliziert, dass Sie etwas falsch machen.

Wenn Sie Bind-Variablen in Ihrem INSERT verwenden -Anweisung muss die Zeichenfolge nicht mit einem Escape-Zeichen versehen werden, wenn ein verirrtes einfaches Anführungszeichen vorhanden ist. Es muss auch nicht versucht werden, SQL-Injection-Angriffe in der Zeichenfolge zu identifizieren, was ein großes Sicherheitsproblem darstellt, wenn Sie keine Bind-Variablen verwenden. Und Sie zwingen Oracle nicht, die Abfrage jedes Mal zu parsen, wenn sie ausgeführt wird, was für die Systemleistung entscheidend ist.

Wenn die Prozedur, von der Sie sprechen, in PL/SQL geschrieben ist, verwendet sie automatisch Bind-Variablen. Wenn Sie die Spaltennamen erraten und davon ausgehen, dass Sie eine Sequenz zum Generieren Ihres Primärschlüssels verwenden, erhalten Sie so etwas wie dieses

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;

Andere Front-End-Sprachen haben andere Ansätze zur Verwendung von Bind-Variablen. Wenn Sie beispielsweise Java mit JDBC schreiben, würden Sie ein PreparedStatement erstellen und rufen Sie dann das entsprechende setXXX auf Methoden, also

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();