`
lz1365871801
  • 浏览: 22558 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
最近访客 更多访客>>
社区版块
存档分类
最新评论

Oracle EBS OAF(ADF) VO(View Object)开发中的绑定方式(Binding Style)的介绍

 
阅读更多

Oracle EBS OAF VO(View Object)开发中的绑定方式(Binding Style)的介绍

OAF VO开发中,Binding Style主要用于对VOwhere 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绑定参数值的时候一定要使用01作为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开发中应该是用得到的,但这个不在我们今天讨论的范围之内。

 

博客转自:http://blog.csdn.net/tavor/article/details/17199223

分享到:
评论

相关推荐

    个性化EBS标准OAF页面

    在Oracle E-Business Suite(EBS)中,个性化标准OAF页面是指基于Enterprise Object(EO)或SQL的版本,通过替换Value Object(VO)添加客户化属性来实现个性化的页面开发。下面是相关的知识点: 个性化EBS标准OAF...

    ORACLE EBS OAF开发笔记

    - **对象类型**:OAF中包含了多种类型的对象,如实体对象(Entity Object)、视图对象(View Object)、视图行(View Row)等。 - **命名规则**:OAF中的对象通常遵循一定的命名规则,以便于管理和识别。 ##### 6.3 JSR ...

    深入浅出Oracle之OAF开发参考

    1) Oracle Application Framework(OA Framework)是Oracle提供的基于HTML应用的开发和发布平台 ...4) OAF使用元数据库支持的(整个页面由XML来定义,定义存储于Oracle数据库中)UIX框架作为其视图部分,将BC4

    OracleEBS11i-OAF开发笔记

    ### Oracle EBS 11i – OAF 开发笔记 #### 概述 Oracle E-Business Suite (EBS) 11i 是一个全面的企业应用套件,它提供了包括财务、供应链管理、人力资源管理和客户服务等一系列功能。Oracle Application ...

    EBS即时打印,oaf在线打印

    在EBS中,OAF(Oracle Application Framework)是一个强大的开发平台,用于构建和定制EBS的应用程序。本文将详细讨论如何通过OAF实现EBS的即时打印功能。 首先,我们要理解OAF的基本概念。OAF是基于JDeveloper的,...

    Oracle EBS 操作手册

    本操作手册将详细介绍Oracle EBS系统的使用方法和功能特性,帮助用户熟悉并掌握其核心功能。 在Oracle EBS R12版本中,主要包含了以下关键知识点: 1. **财务模块**:Oracle EBS的财务模块提供了一整套全面的财务...

    oracle ebs之http通用接口开发

    oracle ebs之http通用接口开发

    Oracle EBS开发文档(form, report)

    - **EBS11iForm开发实现MVC模式**:MVC(Model-View-Controller)模式是一种常用的软件架构模式,通过在EBS中实现MVC模式,可以更好地组织代码结构,提高代码的可维护性。 - **EBS预警功能自定义**:预警功能是EBS中...

    oracle ebs开发文档

    这部分介绍了如何在 EBS 11i 中使用 Model-View-Controller (MVC) 设计模式来开发 Forms,这种模式有助于分离数据、用户界面和控制逻辑,从而提高代码的可维护性和扩展性。 #### 十一、EBS 预警功能自定义 **11.1 ...

    ORACLE EBS 可用浏览器

    在Oracle EBS中,R11和R12是两个重要的版本,分别代表了系统的发展阶段。 R11是Oracle EBS的早期版本,引入了许多先进的功能,如全球化支持、实时财务报告等,对企业流程进行了优化。R12是其后续的重大更新,带来了...

    OracleEBS中文数据字典

    - **数据关系图**:提供了OracleEBS中各数据表之间的逻辑连接方式,帮助用户理解不同表之间的关联性。 **2. 基础信息** - **2.1 数据关系图**:进一步展示数据表间的关系。 - **2.2 数据表简述**:概述了关键数据...

    ORACLE EBS R12 安装步骤详解

    ORACLE EBS R12 安装步骤详解 ORACLE EBS R12 安装步骤详解是 Oracle E-Business Suite 的安装指南,涵盖了从系统环境准备到 ORACLE EBS 安装前的准备、系统配置、打印机安装、Cygwin 安装、VS2005 安装等多个方面...

    Oracle_OAF_开发笔记

    Oracle Application Framework (OAF)是Oracle E-Business Suite (EBS)中的一个关键组件,用于构建用户界面。本文档是基于Oracle EBS 11i的更新版本R12的OAF开发笔记,由Jarwang(王重东)编写,并由Cao Liankai(曹...

    Oracle EBS中文数据字典.pdf

    Oracle EBS中文数据字典.pdf

    ORACLEEBS财务全模块操作手册中文版收集.pdf

    * 系统快捷键和通配符:介绍了 ORACLE EBS 财务模块中的快捷键和通配符的使用,帮助用户快速完成操作。 二、总帐管理 * 帐务管理流程:介绍了 ORACLE EBS 财务模块中的帐务管理流程,包括凭证维护、凭证录入、提交...

    Oracle EBS创建并发请求

    在 Oracle EBS 中创建并发请求是指通过存储过程、执行程序菜单、执行程序参数菜单和责任请求组菜单来实现的。以下是详细的知识点: 一、创建存储过程 在 Oracle EBS 中,存储过程是并发请求的核心部分。使用 PL/...

Global site tag (gtag.js) - Google Analytics