2017-04-17 5 views
0

をnullに挿入するために、次の文はV_IDがここに私のストアドプロシージャどのテーブルでNUMBER列に

QUERY := 'UPDATE EMPLOYEE set MGRID=' || V_ID || 
     ' WHERE OTHER_ID=''' || V1_ID || ''' and CODE=''ABC'''; 

であることは、今私はときMGRIDにNULLを挿入する、null値を持つNUMBER(30)変数であります私は上記のようにORA-00936:式がありません。それはのような

UPDATE EMPLOYEE set MGRID= WHERE OTHER_ID.... 

の下V_IDとして、空白とフォームSQLを扱うので私はMGRIDにnullを挿入することができますか教えてください。彼らはsql injectionする傾向があるよう

+0

バインド変数を考慮してください。それ以外の場合、最も単純なバージョン、.... MGRId = NULL .... – unleashed

答えて

1

おそらく...この場合にはどのような場合には

QUERY := 'UPDATE EMPLOYEE set MGRID=' || nvl(to_char(V_ID),'NULL') || ' WHERE OTHER_ID=''' || V1_ID || ''' and CODE=''ABC'''; 

nvlを使用することができ、一つは文のこの種には注意する必要があります...

+0

以下のエラーが表示されます。SQLエラー:ORA-01722:無効な数字 –

+0

@ArpanPaliwal編集したバージョンを試してください。確かに '無効な番号' ... – Plirkee

+0

はい、それは今、多くのおかげで働いていましたが、なぜそれ以前に無効な番号を与えていたのか、どのto_charが解決したのか説明してください。 –

0

変数の使用バインディング:毎回のクエリのコンパイルを避けるために:

`execute immediate 
     'Update employee set MGRID = :V_ID where OTHERE_ID = :V1_ID and CODE = ''ABC''' 
     using V_ID, V1ID;` 
関連する問題