1、Doc Ref: Error! Reference source not found.
Error! Reference source not found.
2016-07-24
,
2、Number, andVersion are marked by a Word Bookmark so that they can be easily reproduced in the header and footer of documents. When you change any of these values, be careful not to accidentally delete the bookmark. You can make bookmarks visible by selecting Tools->Options…View and checking the Bo
3、okmarks option in the Show region. 1. To add additional approval lines, press [Tab] from the last cell in the table above. Note: You can delete any elements of this cover page that you do not need for your document. For example, Copy Number is only required if this is a controlled document an
4、d you need to track each copy that you distribute. 文档控制 更改记录 3 日期 作者 版本 更改参考 2016-07-06 1.0 无前版本 内容目录 Error! No text of specified style in document.17 of 19 PL/SQL调用使用手册 File Ref: PL/SQL59868c578ee9df3f10fe2282716eba2b.docx (v. 1 )
5、CompanyConfidential - For internal use only 文档控制 ii 1. 文档说明 2 1.1. 适用框架及前端技术 2 2. pl/sql使用 3 2.1. 简单pl/sql使用示例 3 2.2. 复杂pl/sql使用示例(返回游标) 8 2.3. 注意事项 13 1. 未结与已结问 17 未结问题 17 已结问题 17 1. 文档说明 在使用本文档操作实现Hap框架pl/sql使用前,请先详细了解本章节的内容. 1. 适用框架及前端技术 2. 使用jQuery LigerUI引用条件 1.1. 适用框架及前端技术
6、1.1.1. 适用框架 Hap框架 2. pl/sql使用 Tab页访问地址为: 2.1. 简单pl/sql使用示例 通过头行结构,点击头行,在Tab页中显示点击头行的数据. 2.1.1. 页面布局 1. 加载页面,如下图所示: 2. 输入man,点击按钮,如图所示: 2.1.2. 实现Pl/sql调用 实际运用中,我们可能需要调用PL/SQL中的存储过程 1. 创建html界面:
7. 编写存储过程: create or replace procedure queryResult(pUserName in varchar2,rf out sys_refcursor) is --根据用户名查找结果 --参数说明 --pUserName:需要寻找用户名字 begin open rf for select u.p_user_name, u.p_result from p_user u where p_user_name=pUser31、Name; end queryResult; 8. 创建对应的dto用来传递参数: @Id @Column @GeneratedValue private Long pUserId; @Column private String pUserName; @Column private String pUserResult; 9. 创建dto类对应的表: --创建表 CREATE TABLE P_USER ( P_USER_ID NUMBER NOT NULL,
32、P_USER_NAME VARCHAR2(100) NOT NULL, P_RESULT VARCHAR2(100) NOT NULL, OBJECT_VERSION_NUMBER NUMBER DEFAULT 1, REQUEST_ID NUMBER DEFAULT -1, PROGRAM_ID NUMBER DEFAULT -1, CREATION_DATE DATE DEFAULT sysdate NOT NULL, C
33、REATED_BY NUMBER DEFAULT -1 NOT NULL, LAST_UPDATED_BY NUMBER DEFAULT -1 NOT NULL, LAST_UPDATE_DATE DATE DEFAULT sysdate NOT NULL, LAST_UPDATE_LOGIN NUMBER, ATTRIBUTE_CATEGORY VARCHAR2(30), ATTRIBUTE1 VARCHAR2(240), ATTRIBUTE2
34、 VARCHAR2(240), ATTRIBUTE3 VARCHAR2(240), ATTRIBUTE4 VARCHAR2(240), ATTRIBUTE5 VARCHAR2(240), ATTRIBUTE6 VARCHAR2(240), ATTRIBUTE7 VARCHAR2(240), ATTRIBUTE8 VARCHAR2(240), ATTRIBUTE9 VARCHAR2(240), A
35、TTRIBUTE10 VARCHAR2(240), ATTRIBUTE11 VARCHAR2(240), ATTRIBUTE12 VARCHAR2(240), ATTRIBUTE13 VARCHAR2(240), ATTRIBUTE14 VARCHAR2(240), ATTRIBUTE15 VARCHAR2(240) ); --注释 COMMENT ON TABLE P_USER IS 'PLSQL的测试表'; COMMENT ON C
36、OLUMN P_USER.P_USER_ID IS '表ID,主键,供其他表做外键'; COMMENT ON COLUMN P_USER.P_USER_NAME IS '测试用户名'; COMMENT ON COLUMN P_USER.P_RESULT IS '测试结果'; --添加约束 ALTER TABLE P_USER ADD CONSTRAINT P_USER_PK PRIMARY KEY (P_USER_ID); --创建序列 CREATE SEQUENCE P_USER_S START WITH 10001; select * from P_USER;
37、
10. 创建Controller类:
@RequestMapping(value = "/test/difficultplsql/query", method = RequestMethod.POST)
@ResponseBody
public ResponseData selectPlsql2(HttpServletRequest request, @RequestBody List
38、lue = DEFAULT_PAGE_SIZE) int pagesize) {
// 接收页面传来的参数
PUser p = null;
for (PUser pUser : pUsers) {
p = pUser;
}
// 新建一个map,以键值对的形式保存信息
Map
39、ltPlsql(map);
return new ResponseData(list);
}
2.2.3. sevice和mapper接口
5. Sevice接口:
public interface IProService extends IBaseService
40、blic class ProServiceImpl extends BaseServiceImpl
41、st;
}
}
7. Mapper接口:
public interface ProMapper extends Mapper
44、3.1. 参数传递问题(对应简单调用) 1.首先写一个存储过程 2.页面上传过去一个参数 3.错误显示参数没有setter方法,但是存储过程可以执行 4.让我们看一下mapper.xml中怎么写的 5. 原因分析: 我们编写的存储过程中有两个参数,一个IN,一个OUT,但实际上我们页面上只传递了一个参数.上述编码中parameterType只用java.lang.String声明了一个参数,实际上我们在存储过程中放了两个,即使PUserResult mode=OUT,但是仍然需要放一个形参. 6. 解决方案: 参数使用map封装,传递接收。 2.
45、3.2. 参数配置问题(对应复杂调用)
1. 首先写同样是参数配置问题
注意这里好像不能使用parameterMap,以下这种配置方式会报错






