存储过程写法:
create or replace procedure SP_Get_TicketCode(/**产生电子券号存储过程**/
sy_name1 in VARCHAR2,
sy_type_name in VARCHAR2,
ticket_code OUT VARCHAR2/**电子券号**/
)
AS
v_round_num VARCHAR2(6);--6位随即码
v_temp number;
v_ticket_code VARCHAR2(30);
begin
v_temp := 1;
while v_temp > 0 loop
select round(dbms_random.value(1,1000000)) into v_round_num from dual;
IF v_round_num < 10 then
v_ticket_code := sy_name1 || TO_CHAR (SYSDATE, 'yyMMdd') || sy_type_name || '00000' || v_round_num;
elsif v_round_num < 100 then
v_ticket_code := sy_name1 || TO_CHAR (SYSDATE, 'yyMMdd') || sy_type_name || '0000' || v_round_num;
elsif v_round_num < 1000 then
v_ticket_code := sy_name1 || TO_CHAR (SYSDATE, 'yyMMdd') || sy_type_name || '000' || v_round_num;
elsif v_round_num < 10000 then
v_ticket_code := sy_name1 || TO_CHAR (SYSDATE, 'yyMMdd') || sy_type_name || '00' || v_round_num;
elsif v_round_num < 100000 then
v_ticket_code := sy_name1 || TO_CHAR (SYSDATE, 'yyMMdd') || sy_type_name || '0' || v_round_num;
else
v_ticket_code := sy_name1 || TO_CHAR (SYSDATE, 'yyMMdd') || sy_type_name || v_round_num;
END IF;
select count(t.TICKET_ID) into v_temp from t_ec_ticket t where t.TICKET_CODE = v_ticket_code;
IF v_temp = 0 THEN --不重复
ticket_code := v_ticket_code;
exit;
else --重复了
ticket_code := '';
END IF;
end loop;
end SP_Get_TicketCode;
java中调用存储过程的代码:
/**
* 得到电子券号
*
* @return
*/
private String getTicketCode(String syName1,String syTypeName) throws Exception {
String ticketCode = "";
Connection con = null;
CallableStatement ps = null;
try {
con = JDBCUtil.getConn();
// 调用存储过程,生成一个电子券code
ps = con.prepareCall("{call SP_Get_TicketCode(?,?,?)}");
ps.setString(1, syName1);
ps.setString(2, syTypeName);
ps.registerOutParameter(3, Types.VARCHAR);
ps.execute();
// 获得输出结果
ticketCode = ps.getString(3);
if ("-1".equals(ps.getString(3))) {
throw new ServiceException(ps.getString(3));
}
} catch (SQLException e) {
throw new SystemException(e.getMessage());
} finally {
try {
if (ps != null) {
ps.close();
}
if (con != null) {
con.close();
}
} catch (SQLException e1) {
throw new SystemException(e1.getMessage());
}
}
return ticketCode;
}
分享到:
相关推荐
oracle存储过程演示,临时表批量导入到正式表
java mysql存储过程demo
mysql mysql 存储过程完整例子,事件触发mysql 存储过程完整例子,事件触发!!!存储过程完整例子,事件触发mysql 存储过程完整例子,事件触发!!!
使用BPEL调用SQLServer数据库存储过程Demo
三层无存储过程分页Demo 三层无存储过程分页Demo
oracle存储过程函数生成DEMO
简单的oracle存储过程demo,可以参照写法写个存储过程玩玩
VB 调用oracle 带返回值的存储过程 DEMO
三层无存储过程分页Demo 修改web.config ;user id=sa;password=sa;initial catalog=Northwind;" providerName="System.Data.SqlClient"/> Northwinddb是数据库连接名称 .数据库服务器名 这段程序原来是用...
楼主自己通过项目总结的适用于大多数数据库的存储过程demo,适合于苦苦纠结于存储过程语法的开发者,这个文档绝对是你出门在外,秒杀存储过程这道壁垒的利器
ASP实例开发源码—聊天室 三层无存储过程分页Demo.zip ASP实例开发源码—聊天室 三层无存储过程分页Demo.zip ASP实例开发源码—聊天室 三层无存储过程分页Demo.zip
讲解项目中使用存储过程的一个增删改查的小demo,讲解过程可以看我主页。本项目适用于初学存储过程的学者,并不适合提升技能,大神请绕路。
ASP源码—聊天室 三层无存储过程分页Demo.zip
ASP.NET源码——三层无存储过程分页Demo.zip
基于ASP的聊天室 三层无存储过程分页Demo.zip
三层无存储过程分页Demo_dotnet整站程序
通过.net Linq数据访问技术实现分页存储过程。资源包括源码,Sql创建脚本。
ASP.NET-[其他类别]三层无存储过程分页Demo.zip
C# WinForm 分页控件以及Demo演示(存储过程,有脚本)上手草鸡简单的。