我在我的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
我怎么能解决这个问题?
答案 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构造中可用的数组。