oracle 表的语句 create table student(sid int,sname varchar(20),sno int)一:无返回值的存储过程 create or replace procedu
oracle 表的语句
create table student(sid int,sname varchar(20),sno int)
一:无返回值的存储过程
create or replace procedure proc_student(para1 integer, para2 varchar2, para3 integer)
is
begin
insert into student(sid,snam,sno) values (para1,para2,para3);
end ;
public class testprocedureone {
public static final string driver = oracle.jdbc.driver.oracledriver;
public static final string url = jdbc:oracle:thin:@localhost:1521:orcl;
public static final string usernaem = system;
public static final string password = 123;
public static void main(string[] args)
{
resultset rs = null;
connection conn = null;
callablestatement proc = null;
try {
class.forname(driver);
conn = drivermanager.getconnection(url, usernaem, password);
proc = conn.preparecall({call system.testc(?,?,?)});//这里不是preparedstatement接口,而是调用存储过程的接口
proc.setint(1, 1);
proc.setstring(2, zhangsan);
proc.setint(3, 2);//这里的参数是根据sql语句的顺序来的
proc.execute();
} catch (sqlexception ex2) {
ex2.printstacktrace();
} catch (exception ex2) {
ex2.printstacktrace();
} finally {
try {
if (rs != null) {
rs.close();
if (proc != null) {
proc.close();
}
if (conn != null) {
conn.close();
}
}
} catch (sqlexception ex1) {
}
}
}
}
二:有返回值的存储过程(非列表)
create or replace procedure proc_student2(para_1 integer,para_2 out varchar2, para_3 out
integer)
is
begin
select snam,sno into para_2,para_3 from student where sid = para_1;
end proc_student2 ;
java的主要代码如下
proc = conn.preparecall({call system.proc_student2(?,?,?)});
proc.setint(1, 1);
proc.registeroutparameter(2, types.varchar);//输出参数的类型
proc.registeroutparameter(3, types.integer);
proc.execute();
system.out.println(proc.getstring(2)+proc.getint(3));
三:返回列表
由于oracle存储过程没有返回值,它的所有返回值都是通过out参数来替代的,列表同样也不例外,但由于是集合,所以不能用一般的参数,必须要用pagkage了.所以要分两部分,
1,, 建一个程序包。如下:
create or replace package package_1
as
type test_cursor is ref cursor;
end package_1;
2,建立存储过程,存储过程为:
create or replace prcedure proc_student3(stu_cursor out package_1.test_cursor) is
begin
open stu_cursor for select * from system.student
end
可以看到,它是把游标(可以理解为一个指针),作为一个out 参数来返回值的。
java的主要代码如下
proc = conn.preparecall({call system.proc_student3(?)});
proc.registeroutparameter(1, oracle.jdbc.oracletypes.cursor);
proc.execute();
rs = (resultset) proc.getobject(1);
while(rs.next()){
system.out.println(rs.getint(1)+rs.getstring(2)+rs.getint(3));
}
