在Oracle Application Express(ApEx)3.0中添加列时SELECT *中断

时间:2009-01-28 12:12:53

标签: oracle-apex

当我将报表区域的SQL定义为SELECT * FROM some_table时,在将新列添加到some_table之前一切正常 - 然后它会中断“ORAxxx No data found”错误。它很容易修复,因为它足以再次对区域应用更改,即使不进行任何更改也是如此。但是,它并不适用于强大的应用程序。

是否有某些参数组合可以使SELECT *不会破坏新列?将任何默认格式或标题应用于新列就足够了。

我知道我可以从数据字典构造列列表,然后将所有内容连接到SELECT语句中进行评估,但这似乎相当不优雅。

2 个答案:

答案 0 :(得分:3)

通常不建议使用SELECT *查询,因为:

  • 返回所有列,然后优化器的播放次数减少。
  • 使应用程序更少更强大,因为添加新列会更改查询结果,从而产生意外结果。如果没有SELECT *,我的意思是准确提供您需要的列,添加新列对应用程序无关紧要。

无论如何,请记住为视图创建SELECT *,oracle创建视图替换所有列的*,可能是APPEX正在做同样的事情。

答案 1 :(得分:2)

目前,您的区域源(我假设)设置为“使用查询特定列名称和验证查询”。这意味着将为查询中的每个列显式定义报告列,并且SQL应该是静态的。

如果您将区域源更改为“使用通用列名称(仅在运行时解析查询)”,则在添加新列后它仍然有效,列标题默认为列名。

还有另一个属性“通用报告列的最大数量”,默认为60,必须设置为足够大的值,以适应添加到表中的任何未来列。