oracle自行大量读写,Oracle存储过程一

存储过程是数据库服务器端的一段程序,它有两种类型。一种类似于SELECT查询,用于检索数据,检索到的数据能够以数据集的形式返回给客户。另一种类似于INSERT或DELETE查询,它不返回数据,只是执行一个动作。有的服务器允许同一个存储过程既可以返回数据又可以执行动作。

要执行服务器上的存储过程,往往要传递一些参数。这些参数分为四种类型:

第一种称为输入参数,由客户程序向存储过程传递值。

第二种称为输出参数,由存储过程向客户程序返回结果。

第三种称为输入/输出参数,既可以由客户程序向存储过程传递值,也可以由存储过程向客户程序返回结果。

第四种称为状态参数,由存储过程向客户程序返回错误信息。

要说明的是,并不是所有的服务器都支持上述四种类型的参数,例如,InterBase就不支持状态参数。

Oracle存储过程包含三部分:过程声明,过程主体,过程异常

一个简单例子描述了基本存储过程的基本用法。

create or replace procedure proc_test(

p_id in number,

p_info out varchar)

is

v_row users%rowtype;

cursor v_cur is select * from users;

begin

if p_id > 0 then

select * into v_row from users where id = p_id;

p_info := v_row.username||'='||v_row.name;

else

open v_cur;

loop

fetch v_cur into v_row;

exit when v_cur%notfound;

if p_info is null then

p_info := v_row.username||'='||v_row.name;

else

p_info := p_info||','||v_row.username||'='||v_row.name;

end if;

end loop;

close v_cur;

end if;

exception

when too_many_rows then

DBMS_OUTPUT.PUT_LINE('返回值多于1行');

when others then

DBMS_OUTPUT.PUT_LINE('在RUNBYPARMETERS过程中出错!');

end;

在PL/SQL中调用存储过程如下

-- Test statements here

declare

v_id number := 0;

v_info varchar2(4000);

begin

proc_test(v_id, v_info);

DBMS_OUTPUT.PUT_LINE(v_info);

end;

在JAVA中调用存储过程如下

package tf;

import java.sql.CallableStatement;

import java.sql.Connection;

import java.sql.DriverManager;

import java.sql.Types;

public class TestProc {

private static String sDriver = "oracle.jdbc.driver.OracleDriver";

private static String sUrl = "jdbc:oracle:thin:@tf:1521:orcl";

private static Connection conn;

private static CallableStatement cs;

public static void main(String[] args) {

try {

Class.forName(sDriver);

conn = DriverManager.getConnection(sUrl, "test", "123");

cs = conn.prepareCall("{ call proc_test(?,?) }");

cs.setInt(1, 0);

cs.registerOutParameter(2, Types.VARCHAR);

cs.execute();

String result = cs.getString(2);

System.out.println("返回结果为:" + result);

} catch (Exception e) {

e.printStackTrace();

}

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值