继续我的文章之旅:
最近一直在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)
分享到:
相关推荐
- **权限需求**:调用存储过程需要是创建者本人或拥有`EXECUTE ANY PROCEDURE`权限,或被授予了`EXECUTE`权限。 - **方法**: - 直接执行:`EXECUTE 模式名.存储过程名[(参数)];` - 在PL/SQL块中调用:`BEGIN ...
Oracle 存储过程是数据库管理中的一个重要组成部分,它允许开发者编写复杂的SQL和PL/SQL代码,然后在数据库中以函数或程序的形式存储和调用。在处理大量数据时,分页查询是必不可少的,它可以有效地减少网络传输的...
调用存储过程: ```java Map, Object> params = new HashMap(); params.put("id", id); sqlSession.execute("updateEmployeeStatus", params); String status = (String) params.get("status"); ``` 5. **...
5. 事务管理:存储过程内可以包含事务管理语句,确保数据一致性。 六、其他相关概念 除了存储过程,Oracle还提供了存储函数、包、触发器等高级特性,它们共同构成了Oracle数据库的动态SQL和PL/SQL编程体系,为...
基于Oracle数据库的多分辨率海量遥感影像数据的存储管理与调用方法研究 摘要: 本文研究了基于Oracle数据库的多分辨率海量遥感影像数据的存储管理与调用方法。由于遥感和Web技术的高速发展,瓦片遥感影像地图系统的...
1. **创建与调用**:使用CREATE PROCEDURE语句创建存储过程,然后通过EXECUTE语句或者PL/SQL块来调用执行。 2. **参数传递**:存储过程可以接受输入参数、输出参数或双向参数,实现数据交互。 3. **游标和循环**:...
Oracle层次汇总存储过程是Oracle数据库中用于处理层级数据的一种高效技术。在数据库设计中,层级数据常见于组织结构、产品目录、地理位置等场景。Oracle提供了几种处理层级数据的方法,包括自连接、递归子查询、...
例如,文章中给出的创建示例,通过触发器实现`acceptcaseb`表中记录的自动编号,确保了流水号的唯一性和连续性,使得数据管理更为便捷和高效。 除此之外,触发器在数据安全性保障和审计方面也具有不可替代的作用。...
3. **使用OO4O接口存储数据**:调用OO4O接口的方法将SDO_GEOMETRY对象和其他属性数据存储到Oracle Spatial数据库中。 #### 实验结果展示 文章还展示了通过上述方法将Shapefile数据成功存储到Oracle Spatial数据库...
- 使用`CALL`语句调用存储过程,例如:`CALL OUT_TIME();` 这种方式将调用视为一个SQL语句。 - 使用`EXEC`语句调用存储过程,例如:`EXEC OUT_TIME();` 这种方式被视为一个执行体,需要在命令窗口中执行。 - 将...
例如,可以编写一个存储过程,遍历两个表的每一行数据,逐一比较字段值。 ```sql CREATE OR REPLACE PROCEDURE compare_data ( p_source_schema IN VARCHAR2, p_source_table IN VARCHAR2, p_target_schema IN ...
本资源主要涵盖了使用JDBC(Java Database Connectivity)和ODBC(Open Database Connectivity)连接Oracle数据库的方法,同时也涉及到如何处理文本、Access和Excel文件,以及如何调用存储过程。接下来,我们将详细...
综上所述,这个"oracle和mssql分页存储过程-均通用"的压缩包文件提供了一个跨平台的解决方案,帮助开发者在Oracle和MSSQL数据库中轻松实现高效的分页查询,同时提高了代码的可维护性和复用性。在实际应用中,应结合...
8. **约束与索引**:在创建表时,定义了主键约束`PK_ETL_TABLES`,确保每个记录的唯一性。此外,没有明确提及索引,但在实际应用中,为了提高查询性能,可能需要为频繁查询的字段创建索引。 9. **时间戳与开发者...
Oracle存储过程是数据库管理系统中一个非常重要的特性,它允许开发者编写包含一系列SQL和PL/SQL语句的程序单元,以实现更复杂的业务逻辑。在Oracle中,Sequence则是一种自增序列号生成器,通常用于主键或者唯一标识...
- Oracle 使用 `CREATE OR REPLACE` 来创建或更新函数和存储过程。 - SQL Server 需要先检查是否存在,如果存在则删除再创建,如示例中的 `IF EXISTS` 语句。 6. **结构差异**: - Oracle 的 `CREATE` 后面跟着 ...
通过这种方式,你可以轻松地调用存储过程并执行其中的逻辑。在数据库管理中,存储过程是构建高效、模块化应用程序的关键组件,它们可以帮助简化复杂的业务逻辑,提高代码的复用性,并确保数据的一致性和安全性。 ...
Oracle数据库是一种广泛应用于企业级应用的数据管理解决方案,它支持丰富的数据类型、高级的查询功能以及存储过程等程序设计元素。存储过程是预编译的SQL和PL/SQL代码集合,可提高性能、简化管理和增强安全性。在...
三、调用存储过程 调用上述存储过程时,你需要传递相应的参数。例如: ```sql DECLARE v_data SYS_REFCURSOR; BEGIN get_paged_data(10, 2, 'your_table', 'column1, column2', 'column1 = value', v_data); -- ...
调用函数的方法与调用存储过程类似,唯一的区别是函数必须有返回值,因此在.NET中,我们需要将返回值的参数设置为`ReturnValue`类型,并且在调用`ExecuteScalar`或`ExecuteNonQuery`之后,可以通过`ReturnValue`属性...