2017-06-08 14 views
0

文字列を引用するにはdbms_assert.enquote_literalを使用する必要があります。文字列は、自分の関数にパラメータとして渡されているので、私にはわからないスキーマ名です。私が知っている唯一のことは、スキーマ名に一重引用符を含めることができることです。このような文字列の場合、enquote_literalはORA-06502: PL/SQL: numeric or value errorで失敗します。 enquote_literalと同じ出力を与えるenquote_literalの代わりに使用できる代替方法がありますか?一重引用符を含む文字列の代わりにenquote_literalの代わり

+0

'dbms_assert.enquote_literal'を使用する前に、あなたが行うことはできません'置き換える(テキスト、 ' ''' '')) 'か、単一引用符でが必要なのかあなたの最終的なテキスト? –

+0

@SudiptaMondalはい最終テキストに一重引用符が必要です。 – user1612078

答えて

2

ない良い解決策が、簡単な解決策はある

REPLACE(dbms_assert.enquote_literal(REPLACE(text,'''','''''')), 
    '''''',''''); 

入力テキスト

hello'world 

出力テキスト

'hello'world' 

あなたも表示されるように引用符を必要としない場合1回

dbms_assert.enquote_literalreplace(text,'''','')); 
0

「q」を試してみてくださいRead here

select q'['<you string>']' from dual; 

デモ

SQL> select q'['Hello'workddl']' Col from dual; 

COL 
-------------- 
'Hello'workddl' 
+0

dbms_assert.enquote_literalのように、SQLインジェクション攻撃からの安全性はどのくらいですか? – user1612078

+0

また、plsqlブロックで文字列が関数のパラメータとして提供され、ハードコードされていない場合は使用できません。 – user1612078

+1

@ user1612078。あなたは私が共有したリンクを読んだことがありますか? PLSQLでの使用法は見つかりませんでしたか?また、SQLインジェクションでは、動的SQLを使用して手を動かすと画像が表示されます。私はどこでもあなたの質問に動的SQLを使用していない – XING

関連する問題