Oracle调用存储过程添加数据记录(包括唯一性判断)
继续我的文章之旅:
最近一直在Oracle打交道,当然我们也是一些调用采集并不涉及到内部机制。以前听老师说ICBC(爱存不存)后台数据整理,请了一洋鬼子Oracle专家,一小时上万刀!!!听了都让人心痒痒^_^。说完废话切入正题:在JAVA中调用Oracle存储过程往数据表中添加记录,同时在SQL语句中完成(Name)唯一性判断,若不存在相同Name就插入记录否则操作提示已存在相同记录。
整个原理比较简单,为了让需要的人(那些Rookies)知道个究竟我通过实例的方式来讲解。希望对你们有所帮助。
简单的例子,简单言语,让你简单的理解原理,Here we go…
首先你得书写你的SQL语句(具体代码我放在源码件中打包上传),先创建表Toy(用于插入数据使用),然后针对Toy表再创建 Procedure(checkAddToy)用来实现想Toy表插入记录的功能,同时在SQL语句中进行Name(Toy表中的一属性)的唯一性判断。
因为要涉及到过程的使用,所以你对Procedure是什么?怎么运用?如何编写得有一定的了解,这个就不多说了SQL语言的基本知识大家网上自学吧。简单看看这个procedure吧:
create or replace procedure
( p_tid in toy.tid%type, //IN|OUT参数 需要和表中属性类型一致 不然Oracle
p_tname in toy.tname%type, //会报错,比较关键的是定义OUT参数 此参数为在java
p_address in toy.address%type, // 程序会被接收用于判断之用。
p_price in toy.price%type,
p_rebate in toy.rebate%type,
ResultNum out number)
is
id varchar2(10); //SQL内部变量
begin
ResultNum:=0;
select tid into id from toy where tname=p_tname; //这里用于判断是否已经存在相同name
if id is not null then
ResultNum:=1;
else
ResultNum:=2;
return;
end if;
exception
when no_data_found then //这里需要说明一下 本来应该在else里实现插入数据,
insert into toy(tid,tname,address,price,rebate) //可是每当不存在相同name时(即select tid into id from toy where tname=p_tname;此语句返回空值时)
values(p_tid,p_tname,p_address,p_price,p_rebate); //它总是返回异常。试了
dbms_output.put(''); //好几次 都没解决。于是将插入功能移到异常处理部分,同
//样可以实现。只是逻辑上不太讲的过去。哪位仁兄帮改下。。
end;
过程创建完毕,然后就是前台java程序的调用了,写一个简单的类,测试一下就OK 啦:
public class TestMain
{
static Connection conn = null;
static Statement stmt = null;
static ResultSet rs = null;
public static void main(String[] args) {
String driver = "oracle.jdbc.driver.OracleDriver";
String url = "jdbc:oracle:thin:@10.10.40.15:1521:xt";
String user = "user17";
String passwd = "user17";
try
{
Class.forName(driver);
conn = DriverManager.getConnection(url, user, passwd);
//stmt = conn.createStatement();
String tid="F000010";
String tname="jummy";
String address="Shanghai";
int price=10;
float rebate=(float) 0.2;
CallableStatement proc;
try {
proc = conn.prepareCall("{call heckAddToy(?,?,?,?,?,?)}");
proc.setString(1,tid);
proc.setString(2, tname);
proc.setString(3,address);
proc.setInt(4,price);
proc.setFloat(5, rebate);
proc.registerOutParameter(6,OracleTypes.NUMBER);//这里就是获得过程的OUT参数
proc.execute();
int a1=proc.getInt(6);
if(a1==1){
System.out.print("插入失败");
}else{
System.out.print("插入成功");
} catch (SQLException e) {
e.printStackTrace();
}
简单看下输出结果:
if id is not null then
ResultNum:=1;过程中我们是声明不为空 就是存在已有Name时为1,否则为0.然后insert记录。
测试数据:F000010,jummy, Shanghai, 10, 0.2
Toy表结构:
插入F000010之前的数据:
插入之后(因为不存在TNAME=jummy的记录所以插入成功)
当你再插入一条NAME为jummy的记录时,控制台就提示 。整个过程是在SQL里完成。
后记:整个程序简单演示一遍如何创建存储过程以及如何使用,这个懂了以后碰到过程的问题估计也就差不多了。当然不同功能的过程编写还是需要花点功夫的。整个程序我会传在附件里,需要的可以下载参考。(Original Article @All rights reserved)
Oracle调用存储过程添加数据记录(包括唯一性判断)相关推荐
- mysql 触发器检测表数据添加,进而调用存储过程检测数据,进而调用存储过程添加数据...
触发器: begin DECLARE user_mes INT(64); SELECT user_id into user_mes FROM order_orderlist where id = ne ...
- [导入]在ASP.NET+ORACLE添加数据记录并让ID自动增量
在ASP.NET+ORACLE添加数据记录并让ID自动增量需要在ORACLE中设序列和触发器即可,切记不是索引,ASP.NET中不管ID,具体如下: 1.建立序列: CREATE SEQUENCE s ...
- 客户端如何通过咏南中间件调用存储过程和数据分页查询和文件传输的演示
客户端如何通过咏南中间件调用存储过程和数据分页查询和文件传输的演示 演示使用MSSQL 2000的存储过程,其它类型的数据库的存储过程的语法是有所不同的. 1)MSSQL2000通用数据分页存储过程, ...
- oracle调用存储过程output,vb.net 调用oracle的存储过程的方法(带输入参数 和输出参数或者返回记录集)...
1.直接调用存储过程 2 是用包的方式调用存储过程 3 调用存储过程且该存储过程返回记录集 这种必须使用包的方式 1.直接调用存储过程 测试存储过程为: create or replace proce ...
- php psr4 控制器调用模型,控制器中调用模型添加数据
> ## 在控制器中调用模型进行添加数据 ### 1. 添加一条数据<save方法新增数据返回的是写入的记录数.> ```php // 注意不要在同一个实例里面多次新增数据,如果实在 ...
- myabatis oracle 调用存储过程返回list结果集
视频课:https://edu.csdn.net/course/play/7940 Mapper.xml 配置 <resultMap type="emp" id=" ...
- oracle调用存储过程输出,oracle中存储过程调用存储过程(带有返回结果集)
在oracle中,存储过程是可以调用存储过程的.其中,被调用的存储过程可以带返回游标的结果集,或者是一个定义的变量,两者都可以,在实现过程中几乎没什么差别.在调用的存储过程,要注意写好对应的游标或者定 ...
- oracle调用存储过程
调用存储过程时,定义变量declare一定要在begin之前. declare -- Local variables here i integer; a VARCHAR(100); b ...
- Oracle For 循环添加数据
自己亲自使用的,绝对OK --添加数据 declare i number; --用for实现 begin for i in 0 .. 500 loop insert into cust(custsn, ...
最新文章
- PacBio如何获得又长又准确的reads
- ngnix mysql 缓存清除_利用Proxy Cache使Nginx对静态资源进行缓存
- [ATF]-smc指令详解
- 收藏|2021年阿里云开源镜像站最热门镜像王全梳理(附下载链接和Top20镜像王排名)
- 如何得知mysql表结构发生变化了呢?
- php swoole多进程,PHP基于swoole多进程操作示例
- 3 二分频verilog与Systemverilog编码
- python中的series的结构_pandas 数据结构之Series的使用方法
- Http GET、Post方式的请求总结
- 按新的退休年龄计算,64年的职工应该是哪年退休呢?
- 鼠标跟随事件jQuery
- 《Android进阶解密》— Android 书籍
- Linux(12.1-12.6)学习笔记
- 03.09 随手记(Mock数据生成器,Easy Mock基本使用)
- python安装plotly教程_python plotly 使用教程
- 南天PR2 PR2E PR9 中航 PR-b PR-V PR-C PR-t PR-u PR-d GWI PR2 plus 打印机驱动安装视频教程
- 视频Video放器的部分实例方法
- 中国AI领袖人物|阿里王坚:区块链与数据价值的交换
- 苹果手机双卡双待是哪一款_等等党大获全胜 多款5G+5G双卡双待手机值得推荐
- 教程:如何制作一个多功能U盘
热门文章
- 【操作系统】-- 先来先服务算法(FCFS)、短作业优先算法(SJF)、高响应比调度算法(HRRN)
- ensp模拟http服务器显示视频,eNSP模拟服务器(DNS)
- 在硅谷,华人程序员创业者支棱起来!
- JS校验手机号和身份证号格式
- 武汉天喻信息 移动安全领域 SE(Secure Element)
- 如何高效学习3D视觉?
- c语言中生日蛋糕图片大全,关于生日蛋糕图片大全
- mysql中两个表连接_SQL语句中两个表的连接
- 有关Trojan-Downloader.Win32.QQHelper.**文件删除
- YS13-3VFD荧光管时钟