Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Oracle ADF ViewObject-动态更改where子句_Oracle_Oracle Adf - Fatal编程技术网

Oracle ADF ViewObject-动态更改where子句

Oracle ADF ViewObject-动态更改where子句,oracle,oracle-adf,Oracle,Oracle Adf,在我的action类中,我想将where条件更改为sal=10,从而从sal=10的employees中选择select* 我不想要WHERE子句中的empno列 vo.setWhere子句(null)没有清除empno=?。它在现有where子句后面追加sal=? 如何解决这个问题?也许这会帮助您解决这个问题: <ViewObject name ="emp" selectList="select * from employees" Where= "empno=?" />

在我的action类中,我想将where条件更改为
sal=10
,从而从sal=10的employees中选择
select*

我不想要
WHERE
子句中的
empno

vo.setWhere子句(null)
没有清除
empno=?
。它在现有where子句后面追加
sal=?


如何解决这个问题?

也许这会帮助您解决这个问题:

      <ViewObject name ="emp" selectList="select * from employees" Where= "empno=?" />

默认情况下,ViewObject将where子句扩展到现有sql代码。 要避免此问题,应使用ViewObject.FULLSQL\u MODE\u扩充属性。例如:

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

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

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();

在这里,在视图对象中使用简单的“select*query”,并使用bean方法动态添加where子句,然后执行视图对象。

动态子句只能附加到VO查询中。如果需要从VO查询中删除任何子句,则没有相应的方法,因此可以使用以下代码作为解决方法:

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

新的where子句被追加到初始查询中。现在我的sql是select*from employees,其中empno=?sal=10。还有什么我可以避免的吗?好的,然后尝试使用setQuery(String newSql)更改整个sql
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();