sqlmap配置文件增加的:
<!--存储过程-->
<parameterMap id="procParamMap" class="java.util.HashMap" >
<parameter property="p_sbackCode" jdbcType="VARCHAR" javaType="java.lang.String" mode="IN"/>
<parameter property="p_iNodeLevel" jdbcType="INTEGER" javaType="java.lang.Integer" mode="IN"/>
</parameterMap>
<procedure id="countNodeLevel" parameterMap="procParamMap">
{call RASINFO.SETBACKPAY_NODELEVEL(?,?)}
</procedure>
我们展现层框架(struts+dao+sqlmap)中DAO:
public void add(HashMap bfmap)
{
try
{
getSqlMap().insert("insertForTs_BACKPAYTYPE", bfmap);
//插完值后还得调用yuanyun后台的一个存储过程RASINFO.SETBACKPAY_NODELEVEL;
//注意这个存储过程是没有返回值的,有返回值的存储过程调用方法还需要大家继续实践,共享
HashMap params = new HashMap();
params.put("p_sbackCode","$");
params.put("p_iNodeLevel",new Integer(0));
getSqlMap().queryForList("countNodeLevel",params);
}
catch(SQLException sqlexception)
{
throw new DaoException("Error creating Ts_BACKPAYTYPE. Cause: " + sqlexception);
}
}
具体的存储过程(为yangyun提供的,其主要功能是根据具有树结构的数据的上下级关系算出每条数据的级数,这个存储过程只在后台运行,不给前台返回值)
CREATE OR REPLACE Procedure RASINFO.SETBACKPAY_NODELEVEL(p_sbackCode in varchar2 default '$', p_iNodeLevel in int default 0)
AS
Cursor sBackPayCur(p_sParentCode in varchar2) IS
SELECT BackCode FROM RasInfo.TS_BackPayType
WHERE ParentCode=p_sParentCode;
I INT;
v_sBackCode varchar(10);
v_sParentCode varchar(10);
BEGIN
IF p_sBackCode='$' THEN
v_sParentCode := 'BP0ALL';
I := 1;
ELSE
v_sParentCode := p_sbackCode;
I := p_iNodeLevel;
END IF;
FOR S in sBackPayCur(v_sParentCode) LOOP
-- 修改点级别
UPDATE RasInfo.TS_BackPayType SET NodeLevel=I
WHERE BackCode=S.backCode;
-- 先置叶点为0标志
UPDATE RasInfo.TS_BackPayType SET LeafFlag='0'
WHERE BackCode=S.backCode;
-- 再置叶点确值
UPDATE RasInfo.TS_BackPayType SET LeafFlag='1'
WHERE BackCode=S.backCode
AND not Exists( select 1 from RasInfo.TS_BackPayType
WHERE ParentCode=S.backCode);
COMMIT;
SetBackPay_NodeLevel(S.backCode, I+1);
END LOOP;
END;
参考资料:
http://jamesby.iteye.com/blog/post/239540
特别是这一部分:
1. <!--存储过程,如果没有返回列表,procTest的resultMap可以省略-->
2. <parameterMap id="procParamMap" class="java.util.HashMap" >
3. <parameter property="id" jdbcType="INTEGER" javaType="java.lang.Integer" mode="IN"/>
4. <parameter property="outid" jdbcType="INTEGER" javaType="java.lang.Integer" mode="OUT"/>
5. <parameter property="errMsg" jdbcType="VARCHAR" javaType="java.lang.String" mode="OUT"/>
6. </parameterMap>
7. <resultMap id="procResultMap" class="java.util.HashMap" >
8. <result property="a" column="AAA"/>
9. <result property="b" column="BBB"/>
10. <result property="c" column="CCC"/>
11. </resultMap>
12. <procedure id="procTest" parameterMap="procParamMap" resultMap="procResultMap">
13. {call test_sp_1 (?,?,?)}
14. </procedure>
1. public List procTest(Map params) throws Exception {
2. List ret = (List) getSqlMapClientTemplate().queryForList("procTest",params);
3. return ret;
4. }
避免使用存储过程得一个小例子:
SQL> select * from emp;
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
--------- -------------------- ------------------ --------- ---------- --------- --------- ---------
7839 KING PRESIDENT 17-10月-81 5000 10
7698 BLAKE MANAGER 7839 01-5月 -81 2850 30
7782 CLARK MANAGER 7839 18-7月 -81 2450 10
7566 JONES MANAGER 7839 02-4月 -81 2975 20
7654 MARTIN SALESMAN 7698 28-9月 -81 1250 1400 30
7499 ALLEN SALESMAN 7698 20-2月 -81 1600 300 30
7844 TURNER SALESMAN 7698 18-9月 -81 1500 0 30
7900 JAMES CLERK 7698 03-12月-81 950 30
7521 WARD SALESMAN 7698 22-12月-81 1250 500 30
7902 FORD ANALYST 7566 03-12月-81 3000 20
7369 SMITH CLERK 7902 17-12月-80 800 20
7788 SCOTT ANALYST 7566 04-12月-82 3000 20
7876 ADAMS CLERK 7788 13-2月 -83 1100 20
7934 MILLER CLERK 7782 23-2月 -82 1300 10
14 rows selected.
SQL> select * from emp
2 start with empno=7566
3 connect by prior empno = mgr;
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
--------- -------------------- ------------------ --------- ---------- --------- --------- ---------
7566 JONES MANAGER 7839 02-4月 -81 2975 20
7902 FORD ANALYST 7566 03-12月-81 3000 20
7369 SMITH CLERK 7902 17-12月-80 800 20
7788 SCOTT ANALYST 7566 04-12月-82 3000 20
7876 ADAMS CLERK 7788 13-2月 -83 1100 20
即找到7566所有下屬
JONES
-- FORD
-- SMITH
-- SCOTT
-- ADAMS
Oracle用Start with...Connect By子句递归查询
Start with...Connect By子句递归查询一般用于一个表维护树形结构的应用。
创建示例表:
CREATE TABLE TBL_TEST
(
ID NUMBER,
NAME VARCHAR2(100 BYTE),
PID NUMBER DEFAULT 0
);
插入测试数据:
INSERT INTO TBL_TEST(ID,NAME,PID) VALUES('1','10','0');
INSERT INTO TBL_TEST(ID,NAME,PID) VALUES('2','11','1');
INSERT INTO TBL_TEST(ID,NAME,PID) VALUES('3','20','0');
INSERT INTO TBL_TEST(ID,NAME,PID) VALUES('4','12','1');
INSERT INTO TBL_TEST(ID,NAME,PID) VALUES('5','121','2');
从Root往树末梢递归
select * from TBL_TEST
start with id=1
connect by prior id = pid
从末梢往树ROOT递归
select * from TBL_TEST
start with id=5
connect by prior pid = id
Start with...Connect By子句递归查询一般用于一个表维护树形结构的应用。 创建示例表: CREATE TABLE TBL_TEST(&n.
Oracle用Start with...Connect By子句递归查询. 作者:54powerman 的Blog. Start with...Connect By子句递归查询一般用于一个表维护树形结构的应用。 创建示例表:. CREATE TABLE TBL_TEST ( ID NUMBER, NAME VARCHAR2(100 BYTE), PID NUMBER DEFAULT 0 ...
(转)Oracle用Start with...Connect By子句递归查询. 原文出处:http://www.yourblog.org/Data/200612/496779.html Start with...Connect By子句递归查询一般用于一个表维护树形结构的应用。 创建示例表: CREATE TABLE TBL_TEST ...
唯一下载软件下载,软件,下载,共享,共享软件,免费,免费软件,汉化,汉化补丁,游戏,游戏下载,软件教程,软件新闻,软件资讯,操作系统,邮件.
Oracle用Start with...Connect By子句递归查询. ... 从Root往树末梢递归. select * from TBL_TEST start with id=1 connect by prior id = pid. 从末梢往树ROOT递归. select * from TBL_TEST start with id=5 connect by prior pid = id ...
Oracle用Start with...Connect By子句递归查询. 出处:统一教学网; 作者:54powerman 的Blog; 编辑:N/A; 发表日期:2006-6-25 16:00:00 ... 从Root往树末梢递归. select * from TBL_TEST start with id=1 connect by prior id = pid. 从末梢往树ROOT递归 ...
数据库栏OracleOracle用Start with...Connect By子句递归查询,电脑资讯,电脑快报,it资讯,网站建设资讯,教程基地.
Oracle用Start with...Connect By子句递归查询,Or,ra,ac,cl,le,e用,用S,St,ta,ar,rt,tw,wi,it,th,h.,..,..,.C,Co,on,nn,ne,ec,ct,tB,By,y子,子句,句递,递归,归查.
Oracle用Start with...Connect By子句递归查询,数据库使用技巧,网络大本营是一个专门发布编程资料,计算机相关技巧的大型网站,收集的资料非常之多,做中国最大的IT技术库和编程数据库!
简单的ORACLE存储过程
--工资加500,OLD。SAL>2500 不加,NEW。SAL>2500 则改为2500;
SELECT * FROM EMP --加工资之前
CREATE OR REPLACE PROCEDURE SP_ADD (add IN number) is --add参数接收传入的工资增幅
--DECLARE
--CURSOR emp_cur IS SELECT * FROM emp;
BEGIN
FOR sal_sum IN (SELECT * FROM emp) LOOP --使用循环游标隐式打开游标emp_cur或
--(SELECT * FROM emp)(在FOR循环中不需要声明此游标)
--自动从活动集获取行,然后在处理完所有行时关闭游标
IF sal_sum.sal > 2500 THEN --逐行进行比较赋值
UPDATE emp SET sal = sal_sum.sal WHERE empno = sal_sum.empno;
ELSIF (sal_sum.sal + add) > 2500 THEN
UPDATE emp SET sal = 2500 WHERE empno = sal_sum.empno;
ELSE
UPDATE emp SET sal = sal_sum.sal + add WHERE empno = sal_sum.empno;
END IF;
END LOOP;
END;
BEGIN
SP_ADD(500); --输入增资的幅度
END;
SELECT * FROM EMP --加工资之后
分享到:
相关推荐
在.NET开发环境中,IbatisNet是一个流行的持久层框架,它为开发者提供了灵活的数据访问机制,包括直接执行SQL语句和调用存储过程。本篇文章将深入探讨如何在IbatisNet中配置并使用存储过程。 首先,理解IbatisNet的...
而对于使用Ibatis作为持久层框架的应用来说,如何有效地调用存储过程便成为了一个值得探讨的话题。本文将围绕“Ibatis调用存储过程”这一主题展开讨论,旨在帮助读者理解并掌握在Ibatis中调用存储过程的方法。 ####...
存储过程转化 在 Java 开发指南中,存储过程转化是一个基础但重要的概念。本文将详细介绍存储过程转化的实现过程,并对涉及的文件和类进行解释。 1. applicationContext.xml 在 applicationContext.xml 中,我们...
在Java代码中,我们首先准备输入参数并设置输出参数类型,然后调用存储过程并处理返回结果。 ### 总结 通过上述步骤,我们可以看到使用Ibatis框架调用Oracle存储过程并返回自定义类型的过程。这种方法不仅能够提高...
2. **执行存储过程**:通过调用`myProcedure2`存储过程并传入具体的表名,即可生成对应的Java实体类和`SqlMap.xml`文件内容。 #### 六、扩展与优化 - **支持更多数据类型**:除了基本的字符串类型外,还应支持整型...
在IT行业中,数据库操作是不可或缺的一部分,而IBatis作为一款流行的数据映射框架,提供了一种灵活的方式来处理SQL语句,包括调用存储过程。存储过程是数据库中预编译的SQL语句集合,可以提高性能、增强安全性,并...
另外两个xml文件"sqlmap_TEvlRecord.xml"和"sqlmap_TEvlPro.xml"可能与iBatis(或MyBatis)框架相关,这是一个流行的数据层对象映射框架,用于简化Java应用与数据库的交互。这些XML文件可能定义了SQL映射,其中包含...
3. **创建业务逻辑类**:在C#代码中,创建一个业务逻辑类,例如`UserService`,在这个类中,定义调用存储过程的方法。你需要使用`SqlMapClient`对象来执行存储过程,如下所示: ```csharp public class UserService...
从定义结果和参数映射到实际编写C#代码调用存储过程,每一步都需要精心设计。对于复杂的应用程序来说,这种灵活性是非常宝贵的资源。理解IBatisNet的工作原理可以帮助开发者更有效地管理和优化数据库操作。
5. **实现数据访问接口**: 使用`SqlMap`对象,通过`ExecuteProcedure`方法调用存储过程。传入存储过程名、参数以及可能的输出参数对象。 6. **处理结果**: 存储过程的返回值可以是单个值、多行结果集或者两者都有。...
3. **调用存储过程**:通过SqlSession对象的`call`方法执行存储过程,传入存储过程的ID和参数对象。 4. **处理结果**:存储过程的输出参数和返回结果集可以通过ResultHandler或者Map对象进行处理。 5. **事务管理*...
MyBatis是一个优秀的持久层框架,它支持定制化SQL、存储过程以及高级映射,避免了几乎所有的JDBC代码和手动设置参数以及获取结果集。本教程通过一个实际的Eclipse工程,向初学者展示了如何搭建并使用iBATIS进行...
- 对于复杂的SQL查询,考虑使用存储过程,iBATIS也支持调用存储过程。 9. **学习路径** 开始时,你需要理解iBATIS的基本概念,如配置文件、映射文件和接口设计。然后,通过编写简单的增删改查操作,实践SQL映射和...
在IT领域,Ibatis是一个广泛使用的轻量级持久层框架,它提供了一种将SQL语句与Java代码分离的方式,从而简化了数据库操作。SQLMap是Ibatis的核心组件,它定义了如何执行SQL查询、处理结果集以及映射数据到Java对象。...
- **Stored Procedures**:定义存储过程的调用方式。 - **Parameter Maps and Inline Parameters**:参数映射和内联参数,用于处理复杂的数据类型。 - **Inline Parameter Maps**:在SQL语句中直接指定参数值。 ...
通过 `<procedure>` 元素,可以定义存储过程的调用,并通过 `<parameterMap>` 定义输入输出参数。在存储过程中,可以设置参数的模式,如 "IN"、"OUT" 或 "INOUT"。 5. **parameterMap 与 inline parameter** - `...
通过调用存储过程,可以实现更复杂的数据处理逻辑,提高数据库性能。在SqlMap文件中,使用call元素定义存储过程,并通过parameterMap和resultMap进行参数传递和结果映射。 在Java代码中,使用SqlSession对象执行SQL...
SpringMvc作为Spring框架的一部分,主要用于处理HTTP请求和视图的渲染,而iBatis则是一个轻量级的数据访问层框架,它将SQL与Java代码分离,提高了数据库操作的灵活性和可维护性。接下来,我们将深入探讨这两个框架的...
- 支持存储过程:Ibatis支持调用数据库的存储过程,增加了数据库操作的灵活性。 - 动态SQL:通过条件标签,可以编写复杂的动态SQL,无需在Java代码中拼接SQL字符串,降低了出错的可能性。 - 解耦合:通过XML或注解,...
1. **配置映射文件**:在项目中创建XML映射文件,定义SQL语句、存储过程以及数据对象与数据库表字段的映射关系。 2. **数据对象(Data Transfer Object, DTO)**:创建表示数据库表结构的对象,这些对象将在BLL和...