Bạn không nên viết mã để thoát khỏi chuỗi. Việc bạn cần thoát khỏi chuỗi ngụ ý rằng bạn đang làm sai điều gì đó.
Nếu bạn đang sử dụng các biến liên kết trong INSERT
của mình câu lệnh, sẽ không cần phải thoát khỏi chuỗi khi có một câu trích dẫn đơn lẻ bị lạc. Cũng sẽ không cần phải cố gắng xác định các cuộc tấn công SQL injection trong chuỗi, đây là một vấn đề bảo mật lớn nếu bạn không sử dụng các biến liên kết. Và bạn sẽ không buộc Oracle phải phân tích cú pháp truy vấn mỗi khi nó được thực thi, điều quan trọng đối với hiệu suất hệ thống.
Nếu thủ tục bạn đang nói đến được viết bằng PL / SQL, nó sẽ tự động sử dụng các biến liên kết. Đoán tên cột và giả sử rằng bạn đang sử dụng một chuỗi để tạo khóa chính của mình, bạn sẽ có một cái gì đó như thế này
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;
Các ngôn ngữ front-end khác sẽ có các cách tiếp cận khác nhau để sử dụng các biến ràng buộc. Ví dụ:nếu bạn đang viết Java bằng JDBC, bạn sẽ tạo một PreparedStatement
và sau đó gọi setXXX
thích hợp phương pháp, tức là
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();