sql >> データベース >  >> RDS >> Oracle

SQLで引用符を処理するにはどうすればよいですか?

    エスケープ文字は'であるため、引用符を2つの引用符に置き換える必要があります。

    たとえば、

    SELECT * FROM PEOPLE WHERE SURNAME='O'Keefe'

    になる

    SELECT * FROM PEOPLE WHERE SURNAME='O''Keefe'

    そうは言っても、これを自分で行うのはおそらく間違っています。あなたの言語にはSQLで使用するために文字列をエスケープする関数があるかもしれませんが、さらに良いオプションはパラメータを使用することです。通常、これは次のように機能します。

    SQLコマンドは次のようになります:

    SELECT * FROM PEOPLE WHERE SURNAME=?

    次に、実行時に「O'Keefe」をパラメータとして渡します。

    SQLはパラメーター値が設定される前に解析されるため、パラメーター値がSQLの構造を変更する方法はありません(また、異なるパラメーターを使用して同じステートメントを複数回実行する場合は、少し速くなります)。

    また、あなたの例ではエラーが発生するだけですが、文字列を適切にエスケープしないと、他の多くの問題が発生する可能性があることも指摘しておく必要があります。 http://en.wikipedia.org/wiki/SQL_injection を参照してください。 良い出発点または次の古典的なxkcdコミック 。



    1. MyBatisRowBoundsはクエリ結果を制限しません

    2. 値の変更時に選択

    3. 配列をフィールド値として保存したり、配列値をレコードとして保存したりするのは良い考えですか?

    4. PL/SQLプロシージャを使用してOracle10gでテーブルのダンプを取得する