3

OracleapexアプリのP16_X値と同じようにページアイテムを作成しました。998,785,523次にClassic Report、apexページにを作成し、以下のコードをとして追加しましたRegion Source

  select 
   sale_date,
   invoice_number , 
   sale_amount from sale
    where sale_id in (:P16_X);

ページをロードすると、以下のエラーが発生しました。

  report error:
  ORA-01722: invalid number

どうすればこれを解決できますか?

4

3 に答える 3

1

これを試して

  select 
   sale_date,
   invoice_number , 
   sale_amount from sale
    where ','||:P16_X||',' like '%,'||sale_id||',%'

PS: このパラメーターをクエリ oracle に送信すると、文字列 "998,785,523" として取得されるため、元のクエリは失敗します。このクエリでは、次を取得します。

','||'998,785,523'||',' like '%,'||sale_id||',%'

それは以下と同等です:

',998,785,523,' like '%,'||sale_id||',%'

たとえば、sale_id=523 の場合、次のように変換されます。

',998,785,523,' like '%,523,%' 

このsale_idはTRUEです。

于 2012-09-19T07:56:21.837 に答える
0

ユーザー入力を SQL に直接連結すると、SQL インジェクションの問題が発生します。代わりに apex_util.string_to_table を見てください。CSV を IN 構造で使用できる配列に変換できます。

于 2012-11-13T22:26:37.773 に答える
0

APEXについてはわかりませんが、Oracleはp16を数値として扱いますが、「998,785,523」は彼を文字列として検索するため、一時テーブルにこれら3つの値を追加し、IN句でselect fromを使用するか、「998,785,523」を解析する必要があります。 ' IN 句でも使用するか、動的 SQL を使用して select ステートメントを作成します。私は最初の提案に投票します。

于 2012-09-19T07:51:47.977 に答える