Oracle
 sql >> Baza danych >  >> RDS >> Oracle

Błąd podczas wstawiania danych zawierających pojedyncze cudzysłowy

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


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Klucz obcy Oracle

  2. Wykonaj funkcję Oracle, która zwraca kursor referencyjny w C#

  3. Hibernacja sekwencji nextVal rozwiązana, ale nie użyta (Oracle)

  4. jak wyeksportować dane z około 300 tabel w ORACLE DB do plików csv lub txt

  5. Jaka jest różnica między funkcjami RANK() i DENSE_RANK() w Oracle?