SQL IN函数问题

时间:2012-09-19 07:46:37

标签: sql oracle11g oracle-apex

我在我的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

我怎么能解决这个问题?

3 个答案:

答案 0 :(得分: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是正确的。

答案 1 :(得分:0)

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

答案 2 :(得分:0)

将用户输入直接连接到SQL中是在询问SQL注入问题。相比之下,请查看apex_util.string_to_table,它允许您将CSV转换为IN构造中可用的数组。