3

我已经在我的 oracle apex 应用程序中创建了一个页面项,P16_X其中包含值。998,785,523然后我Classic Report在我的顶点页面中创建了一个并将下面的代码添加为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 是真的。

于 2012-09-19T07:56:21.837 回答
0

不知道 APEX,但问题是 Oracle 将 p16 视为数字,但 '998,785,523' 将他视为字符串,因此我认为您应该在任何临时表中添加这 3 个值并在 IN 子句中使用 select from 或解析 '998,785,523 ' 并在IN子句中使用它或使用动态sql创建您的选择语句。我投票赞成我的第一个建议。

于 2012-09-19T07:51:47.977 回答
0

将用户输入直接连接到您的 SQL 中会导致 SQL 注入问题。请查看 apex_util.string_to_table,它允许您将 CSV 转换为可用于 IN 构造的数组。

于 2012-11-13T22:26:37.773 回答