ADF ViewObject-动态更改where子句

时间:2016-06-15 19:35:22

标签: oracle oracle-adf

HardWorker.new.perform

在我的操作类中,我想将where条件更改为 <ViewObject name ="emp" selectList="select * from employees" Where= "empno=?" /> ,导致sal=10

我不希望select * from employees Where sal =10子句中的empno列。

WHERE未清除vo.setwhereclause(null)。它将empno =?附加到现有的where子句。

如何解决这个问题?

4 个答案:

答案 0 :(得分:1)

最简单的方法是不要在视图对象查询中包含param,而是通过back bean或托管bean函数代码动态使用where param,

ViewObject vo1 = applicationmoduleobject.findViewObject("viewobjectname");
vo.setWhereClause(" CREATED_BY = userId and ASSIGNMENT_ID = assignId"); 
long count = vo.getEstimatedRowCount();

在这里,在你的视图对象中使用简单的&#34; select * query&#34;并使用bean方法动态添加where子句并执行您的视图对象。

答案 1 :(得分:0)

也许这会帮助你解决它:

<ViewObject name="emp" selectList="select * from employees" Where="sal=10" />

答案 2 :(得分:0)

默认情况下,ViewObject将where子句扩充到现有的sql代码。 要避免此问题,您应该使用ViewObject.FULLSQL_MODE_AUGMENTATION属性。例如:

ViewObject vo = getViewObject();
vo.setFullSqlMode(voi.FULLSQL_MODE_AUGMENTATION);
vo.setWhereClause("sal=:sal"); //or use setSql()
vo.setWhereClauseParam("sal",10.00);
vo.clearCache();
vo.executeQuery();

答案 3 :(得分:0)

动态子句只能附加到VO查询。如果需要从VO查询中删除任何子句,则不存在任何方法,因此以下代码可用作解决方法:

System.out.println("Original query: " +sanctVo.getQuery());

sanctVo.setQuery("select * from employees where sal = :1");
sanctVo.setWhereClauseParam(0, 10);
System.out.println("New query: " +sanctVo.getQuery());
sanctVo.executeQuery();