38

INSERTオラクルでステートメントを実行しようとすると、ステートメントSQL Error: ORA-00917: missing commaのように値があるため、エラーが発生しました。Alex's Tea FactoryINSERT

どうすれば逃げることができ'ますか?

4

7 に答える 7

66

それを回避するには、引用符を2倍にします。

INSERT INTO TABLE_A VALUES ( 'Alex''s Tea Factory' );
于 2012-07-30T07:39:17.063 に答える
12

SQLでは、引用符を別の引用符でエスケープします。

SELECT 'Alex''s Tea Factory' FROM DUAL
于 2012-07-30T07:39:03.290 に答える
8

以下の例のようにESCAPEを使用できます

'_' ワイルドカード文字は正確に 1 文字に一致するために使用され、'%' は任意の文字の 0 回以上の出現に一致するために使用されます。これらの文字は SQL でエスケープできます。

SELECT name FROM emp WHERE id LIKE '%/_%' ESCAPE '/';

同じことがPL/SQL内でも機能します。

 if( id like '%/_%' ESCAPE '/' )

これは、同様のパターンにのみ適用されます。たとえば、挿入では _ や % をエスケープする必要はありません。いずれにせよ、それらはプレーンな文字として使用されます。任意の文字列では、'' でエスケープする必要があるのは '' だけです。

于 2012-07-30T09:05:09.440 に答える
2

あなたの質問は、文字列を連結して INSERT ステートメントを構築していることを意味します。文字列がユーザー入力から派生している場合、SQL インジェクション攻撃を受けやすくなるため、これは適切な選択ではないことをお勧めします。より良い選択は、パラメーター マーカーを使用し、値をマーカーにバインドすることです。検索するOracle parameter markersと、特定の実装テクノロジに関する情報が見つかる可能性があります (例: C# と ADO、Java と JDBC、Ruby と RubyDBI など)。

共有してお楽しみください。

于 2012-07-30T11:16:02.260 に答える