0

こんにちは、このクエリを起動しようとしています

update txnblackout
  set enddate= ''TO_DATE('25/02/2012','dd/mm/yyyy')''
  where idsequence='1'

しかし、それはエラーを出して動作していません

ORA-00933: SQL command not properly ended

正当化していただけませんか。なぜそれが起こっているのですか?

これは、クエリを作成するために使用しているJavaコードです: -

Map<String, String> l_script_columns = new HashMap<String, String>();
        l_script_columns.put("startdate", "'TO_DATE('"
            + txtStartDate.getText().trim() + "','"
            + FieldMapperHelper.DATE_Format + "')'");

さらに説明が必要な場合はお知らせください。ありがとうございます。

4

4 に答える 4

2

なぜあなたはエスケープをしているのですか?

with txnblackout as 
       (select trunc(sysdate + level) enddate /* trunc drops time component */ , level idsequence
          from dual
       connect by level <= 10 /* this will generate 10 rows with an incrementing 'level' value */ )
select enddate
     , idsequence
  from txnblackout
 where enddate = to_date('20/10/2012','dd/mm/yyyy')
;

したがって、余分な引用符を削除しても安全なはずです。それらは必要ありません。

update txnblackout
  set enddate= TO_DATE('25/02/2012','dd/mm/yyyy')
  where idsequence=1;

(これは idsequence が数値であると仮定していることに注意してください)


結局のところ、パラメータ化されていない動的 SQL クエリを Oracle に渡す場合は、次のようにする必要があります。

"update txnblackout   
    set enddate= TO_DATE(''25/02/2012'',''dd/mm/yyyy'')  
  where idsequence=1;"

(idsequence は varchar ではなく NUMBER 型であると想定していることに注意してください)

ただし、これを確認してください。安全を確保してください。

パラメータ化すれば、エスケープについても心配する必要はありません。

Java での SQL インジェクションの防止

于 2012-10-16T13:31:01.013 に答える
1

上記のクエリは、日付またはテキストを保持したいので、最初のケースでは

    update txnblackout 
        set enddate= TO_DATE('25/02/2012','dd/mm/yyyy')
      where idsequence='1'

テキストまたは数値であるIDシーケンスは重要ではありません.2番目のケースでは、テキストを保持したい:

     update txnblackout 
        set enddate= 'TO_DATE(''25/02/2012'',''dd/mm/yyyy'')'
      where idsequence='1'

初めての方はチェックして欲しいと思います。よろしくお願いします

于 2012-10-16T13:50:06.977 に答える
1

この場合、これを試す必要があります:

Map<String, String> l_script_columns = new HashMap<String, String>();
        l_script_columns.put("startdate", "'||TO_DATE('"
            + txtStartDate.getText().trim() + "','"
            + FieldMapperHelper.DATE_Format + "')||'");

最終結果は次のようになります。

update txnblackout 
    set enddate= ''||TO_DATE('25/02/2012','dd/mm/yyyy')||''
  where idsequence='1'
于 2013-02-11T09:34:30.920 に答える
0

';'を入れてみてください コマンドの最後に...

コマンドは次のようになります。 update txnblackout set enddate= ''TO_DATE('25/02/2012','dd/mm/yyyy')'' where idsequence='1';

于 2013-03-18T14:21:31.597 に答える