在OAF VO开发中,Binding Style主要用于对VO的where clause做动态传值,总共有三种方式

1.       Oracle Named

2.       Oracle Positional

3.       JDBC Positional

Oracle Positional

Oracle Positional 是最常用的一种方式,Oracle文档的介绍是

This style represents parameters as colons followed by numbers, as in the following code fragment:WHERE bar = :1 AND foo = :2 In this style, the numbers are just for easier readability: Parameters are passed into the view object in the order in which the numbers occur. The above fragment, for example, is equivalent to WHERE bar = :70 AND foo = :3

简单来说,这种方式中的参数都是以‘:’和数字来声明的,比如:WHERE bar = :1 AND foo = :2。这种方式来说,数字只是用来增加可读性,参数只会根据数字在VO Sql Statement中出现的顺序传入到View Object中,而不会根据数字的大小而传入。比如,上面的代码片段和下面这个是一样的效果WHERE bar = :70 AND foo = :3,下面会在实现中具体介绍。

如何在VO使用Oracle Positional绑定方式

首先,我们需要在VO定义界面上进行设置,

1.       Binding Style 设成 Oracle Positional

2.       在VO SQL Statement 中的where clause里面使用 ‘:’加上数字作为参数,比如 :1.

在VO上设置完之后,我们需要执行VO查询之前,使用vo.setWhereClauseParam(int index, Object value)对VO的绑定参数进行赋值,如下面的代码。

public void initShipToLocation(String org_id)

{

RcvShipToLocationVOImpl vo =this.getRcvShipToLocationVO1();

vo.setWhereClause(null);

vo.setWhereClauseParam(0, new Number(Integer.parseInt(org_id)));

}

 

 

使用Oracle Positional 绑定方式需要注意的问题

1.         在使用vo.setWhereClauseParam(int index, Object value)进行赋值的时候, index一定是从0开始的,接着就是1,2,3,…… .但是在VO SQL Statement中,参数却不是必须从0开始,而且后面的参数的数值也不必比前面的大。比如下面的也是可以的,

但是在使用vo.setWhereClauseParam()给VO绑定参数值的时候一定要使用0和1作为index,而且index必须和绑定参数在VO SQL Statement中出现的顺序对应的类型一致,比如

public void initShipToLocation(String org_id)

{

RcvShipToLocationVOImpl vo =this.getRcvShipToLocationVO1();

vo.setWhereClause(null);

vo.setWhereClauseParam(0, new Number(Integer.parseInt(org_id)));

vo.setWhereClauseParam(1, "hello");

}

如果使用了其它的任何的Index,就会抛出下面的异常(无效的列索引)

oracle.apps.fnd.framework.OAException: oracle.jbo.SQLStmtException: JBO-27122:Invalid column index …..

2.         如果在VO SQL Statement中使用了:加数字作为绑定参数,并且在给VO设置绑定值的时候使用了vo.setWhereClauseParam(),那么一定要保证VO的绑定方式(Binding Style)为 Oracle Positional,否则可能会出现下面的异常(无效的列类型)

oracle.apps.fnd.framework.OAException: oracle.jbo.SQLStmtException: JBO-27122:Invalid column type …..

3.         如果VO SQL Statement中两个或多个绑定参数每次一定是一样的值传入,在VO SQL Statement虽然可以使用相同的数字作为绑定参数,但在使用vo.setWhereClauseParam()设置绑定值的时候也要分别设值,而且建议不要使用相同的数字作为绑定参数。

public void initShipToLocation(String org_id)

{

RcvShipToLocationVOImpl vo =this.getRcvShipToLocationVO1();

vo.setWhereClause(null);

vo.setWhereClauseParam(1, "hello");

vo.setWhereClauseParam(2, "hello");

vo.setWhereClauseParam(0, new Number(Integer.parseInt(org_id)));

}

否则VO在执行查询的时候会报下面的错误

java.sql.SQLException: 索引中丢失  IN 或 OUT参数:: 8

Oracle Named

Oracle Named 绑定方式是VO定义中的默认方式,也是非常常用的一种方式,Oracle文档的介绍是

This style represents parameters as colons followed by identifiers, as in the following code fragment:WHERE bar = :barparam AND foo = :fooparam Unlike the positional styles, the names of the parameters are actually used when the application fills the parameter values.

顾名思义,Oracle Named方式就是‘:’和名字的方式来表示参数,而不是像Oracle Positional用数字.这种方式的好处就是相同的参数可以使用同一个名字,在VO初始化参数的时候对相同名字的参数只用初始化一次就可以了,在下面的实现中会具体介绍.

如何在VO使用Oracle Named绑定方式

首先,我们需要在VO定义界面上进行设置,

1.       在Bind Variable 页面上定义要在VO SQL Statement中使用的绑定参数的名字,类型和默认值。

2.       在VO SQL Statement页面上设置Binding Style为 Oracle Named.

3.       在VO SQL Statement 中的where clause里面使用 ‘:’加上Bind Variable中定义的Bind variable作为参数,比如 :inv_org_id,而且这些参数我们可以使用多次。

在VO定义上设置完之后,我们需要执行VO查询之前,使用vo.setNamedWhereClauseParam(String name, Object value)对VO的绑定参数进行赋值,如下面的代码。

public void initRcvSubinventory(String orgId, String itemId, String receiptSourceCode)

{

RcvSubinventoryLovImpl vo =this.getRcvSubinventoryLov1();

vo.setWhereClause(null);

vo.setWhereClauseParams(null);

vo.setNamedWhereClauseParam("inv_org_id", orgId);

vo.setNamedWhereClauseParam("rcv_item_id", itemId);

vo.setNamedWhereClauseParam("receipt_source_code", receiptSourceCode);

}

使用Oracle Named 绑定方式需要注意的问题

1.       在使用Oracle Named绑定方式的时候一定要声明Bind Variable,如果没有声明就在VO SQL Statement中使用,在运行时就会出现下面的错误.

(oracle.jbo.SQLStmtException) JBO-27122: SQL error during statement preparation.

## Detail 0 ##

(java.sql.SQLException) Missing IN or OUT parameter at index:: 1

2.       相反,如果定义了Bind Variable, 但是在VO SQL Statement中没有使用他,或者定义的类型错误,在运行时就会抛出下面的错误

oracle.jbo.SQLStmtException: JBO-27122: SQL error during statement preparation.

## Detail 0 ##

java.sql.SQLException: Attempt to set a parameter name that does not occur in the

SQL: inv_org_id

3.       如果在定义Bind Variable的时候没有指定默认值,而且在运行时没有使用vo.setNamedWhereClauseParam()初始化Bind Variable,那么Bind Variable默认将会使用NULL值.但一般情况下,NULL不是用户需要的,请记得设置默认值或者运行时为Bind Variable指定值。

JDBC Positional

这种绑定方式在EBS OAF开发中是不常见的,因为Oracle文档中是这么介绍的

This style represents parameters as question marks, as in the following code fragment:WHERE foo = ? AND bar = ?. This should be used only if you are working with non-oracle database.

因为EBS应该没有使用非ORACLE数据库的,所以应该在OAF开发中是用不到的,但是在ADF开发中应该是用得到的,但这个不在我们今天讨论的范围之内。

参考:Tavor - http://blog.csdn.net/tavor/article/details/17199223

OAF_VO系列3 - Binding Style绑定方式的更多相关文章

  1. 控制文本和外观------Style Binding(Style属性绑定)

    目的 style绑定是添加或删除一个或多个DOM元素上的style值.比如当数字变成负数时高亮显示,或者根据数字显示对应宽度的Bar.(注:如果你不是应用style值而是应用CSS class的话,请 ...

  2. WCF编程系列(三)地址与绑定

    WCF编程系列(三)地址与绑定   地址     地址指定了接收消息的位置,WCF中地址以统一资源标识符(URI)的形式指定.URI由通讯协议和位置路径两部分组成,如示例一中的: http://loc ...

  3. SNF快速开发平台MVC-各种级联绑定方式,演示样例程序(包含表单和表格控件)

    做了这么多项目,经常会使用到级联.联动的情况. 如:省.市.县.区.一级分类.二级分类.三级分类.仓库.货位. 方式:有表单需要做级联的,还是表格行上需要做级联操作的. 实现:实现方法也有很多种方式. ...

  4. wpf中UserControl的几种绑定方式

    我们经常会抽取一些可重用的控件,某个属性是否需要重用,直接决定了这个属性的绑定方式. 1.完全不可重用的控件 有一些与业务强相关的控件,它们的属性完全来自ViewModel,越是相对复杂的控件,越容易 ...

  5. Vue中class与style绑定

    gitHub地址:https://github.com/lily1010/vue_learn/tree/master/lesson07 一 用对象的方法绑定class 很简单,举个栗子: <!D ...

  6. Knockout.Js官网学习(style绑定、attr绑定)

    Style绑定 style绑定是添加或删除一个或多个DOM元素上的style值.比如当数字变成负数时高亮显示,或者根据数字显示对应宽度的Bar.(注:如果你不是应用style值而是应用CSS clas ...

  7. 你想要的都在这里,ASP.NET Core MVC四种枚举绑定方式

    前言 本节我们来讲讲在ASP.NET Core MVC又为我们提供了哪些方便,之前我们探讨过在ASP.NET MVC中下拉框绑定方式,这节我们来再来重点看看枚举绑定的方式,充分实现你所能想到的场景,满 ...

  8. 前端MVC Vue2学习总结(三)——模板语法、过滤器、计算属性、观察者、Class 与 Style 绑定

    Vue.js 使用了基于 HTML 的模版语法,允许开发者声明式地将 DOM 绑定至底层 Vue 实例的数据.所有 Vue.js 的模板都是合法的 HTML ,所以能被遵循规范的浏览器和 HTML 解 ...

  9. ASP.NET Core MVC四种枚举绑定方式

    前言 本节我们来讲讲在ASP.NET Core MVC又为我们提供了哪些方便,之前我们探讨过在ASP.NET MVC中下拉框绑定方式,这节我们来再来重点看看枚举绑定的方式,充分实现你所能想到的场景,满 ...

随机推荐

  1. 从扩展方法到匿名方法再到LINQ

    1.首先我们应该知道什么是扩展方法: 扩展方法使您能够向现有类型“添加”方法,而无需创建新的派生类型.重新编译或以其他方式修改原始类型. 扩展方法是一种特殊的静态方法,但可以像扩展类型上的实例方法一样 ...

  2. for循环小题

    已知数列1,1,2,3,5,8,…….,N.输出前N项的和: 出1到100之间所有偶数之和 国际象棋问题 已知数列1,1,2,3,5,8,…….,N.输出前N项的和: int a = 1, b = 1 ...

  3. linux -samba

    yum install samba samba-client samba-swat samba-common-3.6.9-151.el6.x86_64 //主要提供samba服务器的设置文件与设置文件 ...

  4. MVC5+EF6 (附加分页功能)

    我们对之前的Views à Account à Index.cshtml 进行修改以完成今天的示例. 界面样式修改前: 下面对Views à Account à Index.cshtml进行如下修改: ...

  5. CentOS快速搭建subversion服务器

    环境:centos x86_64说明:使用daemon的方式来跑svn,不使用apache首先到:http://subversion.tigris.org/ 下载最新的subversion源码 我下的 ...

  6. FAQ unzip无法解压文件

    [root@TEST144239 tmp]# unzip linx64_11gR2_database_1of2.zipArchive:  linx64_11gR2_database_1of2.zipw ...

  7. Hibernate3回顾-3-Session管理

    3.Session管理 仅为个人理解.请指正 3.1背景 由于Configuration的创建耗费系统的资源.所以有必要只将Configuration实例化一次,之后通过SessionFactory获 ...

  8. MS CRM 2011的自定义和开发(11)——插件(plugin)开发(四)

    http://www.cnblogs.com/StoneGarden/archive/2012/02/08/2343294.html MS CRM 2011的自定义和开发(11)——插件(plugin ...

  9. HTML5判断设备在线离线及监听网络状态变化例子

    经测试android ipad默认的浏览器支持,用appcan封装的网页也支持 本文原创,转载请说明出处 <!doctype html> <html> <head> ...

  10. windows 2003 上安装windows liver writer

    下载"resource hacker"软件,修改exe文件,找到config--config0-0 替换为: <?xml version="1.0" en ...