Java 开发中之七:oracle中的子程序之在JAVA中如何调用存储过程,函数。
2012-12-11 20:55
936 查看
存储过程
create or replace procedure p1(pnm varchar2,psal out number)
as
cursor ca is select * from emp where ename=upper(pnm);
v_ca ca%rowtype;
begin
for v_ca in ca loop
psal:=v_ca.sal;
end loop;
exception
when others then
dbms_output.put_line(sqlerrm);
end ;
SQL> var sal varchar2;
SQL> exec p1('smith',:sal);
在JAVA中调用
Connection connection=null;
CallableStatement statement=null;
OracleConnection conn=null;
try
{
Class.forName("oracle.jdbc.driver.OracleDriver");
//DriverManager.registerDriver("oracle.jdbc.driver.OracleDriver");
String url="jdbc:oracle:thin:@127.0.0.1:1521:ORCL";
String user="scott";
String password="tiger";
//下面是標準的的連接對象
//connection= DriverManager.getConnection(url, user, password);
//下面是在標準的連接不上時可以考慮的
conn=(OracleConnection) DriverManager.getConnection(url, user, password);
String strsql="{call p1(?,?)}";//
statement=conn.prepareCall(strsql);//调用
//传参
statement.setString(1, "smith");//in
statement.registerOutParameter(2, Types.FLOAT);//out
statement.execute();//执行
float sal= statement.getFloat(2);//取得內容
System.out.println(sal);
}
catch (ClassNotFoundException e)
{
e.printStackTrace();
}
finally
{
if(conn!=null)
{
conn.close();
}
if(connection!=null){
connection.close();
}
if(statement!=null){
statement.close();
}
}
函数的调用
create or replace function f1(pnm varchar2)
return number --函数一定有返回值
as
v_sal number;
begin
select sal into v_sal from emp where ename=upper(pnm);
return v_sal;
exception
when others then
dbms_output.put_line(sqlerrm);
end;
如下是调这个函数的语句块
declare
v_s number;
begin
v_s:=f1('smith');
dbms_output.put_line(v_s);
end;
如下是JAVA中调用
Connection connection=null;
CallableStatement statement=null;
OracleConnection conn=null;
try
{
Class.forName("oracle.jdbc.driver.OracleDriver");
//DriverManager.registerDriver("oracle.jdbc.driver.OracleDriver");
String url="jdbc:oracle:thin:@127.0.0.1:1521:ORCL";
String user="scott";
String password="tiger";
//下面是標準的的連接對象
//connection= DriverManager.getConnection(url, user, password);
//下面是在標準的連接不上時可以考慮的
conn=(OracleConnection) DriverManager.getConnection(url, user, password);
String strsql="{?=call f1(?)}";
statement= conn.prepareCall(strsql);
statement.setString(2, "smith");
statement.registerOutParameter(1, Types.FLOAT);
statement.execute();
float f= statement.getFloat(1);
System.out.println(f);
}
catch (ClassNotFoundException e)
{
e.printStackTrace();
}
finally
{
if(conn!=null)
{
conn.close();
}
if(connection!=null){
connection.close();
}
if(statement!=null){
statement.close();
}
}
总结:函数和存储过程的传入的参数类型:varchar2 number date emp.sal%type pl/sql中的表(数组) 引用的游标
缺点:返回值:单值,对集合数据没有用,所有就有下章节的程序包出现了
create or replace procedure p1(pnm varchar2,psal out number)
as
cursor ca is select * from emp where ename=upper(pnm);
v_ca ca%rowtype;
begin
for v_ca in ca loop
psal:=v_ca.sal;
end loop;
exception
when others then
dbms_output.put_line(sqlerrm);
end ;
SQL> var sal varchar2;
SQL> exec p1('smith',:sal);
在JAVA中调用
Connection connection=null;
CallableStatement statement=null;
OracleConnection conn=null;
try
{
Class.forName("oracle.jdbc.driver.OracleDriver");
//DriverManager.registerDriver("oracle.jdbc.driver.OracleDriver");
String url="jdbc:oracle:thin:@127.0.0.1:1521:ORCL";
String user="scott";
String password="tiger";
//下面是標準的的連接對象
//connection= DriverManager.getConnection(url, user, password);
//下面是在標準的連接不上時可以考慮的
conn=(OracleConnection) DriverManager.getConnection(url, user, password);
String strsql="{call p1(?,?)}";//
statement=conn.prepareCall(strsql);//调用
//传参
statement.setString(1, "smith");//in
statement.registerOutParameter(2, Types.FLOAT);//out
statement.execute();//执行
float sal= statement.getFloat(2);//取得內容
System.out.println(sal);
}
catch (ClassNotFoundException e)
{
e.printStackTrace();
}
finally
{
if(conn!=null)
{
conn.close();
}
if(connection!=null){
connection.close();
}
if(statement!=null){
statement.close();
}
}
函数的调用
create or replace function f1(pnm varchar2)
return number --函数一定有返回值
as
v_sal number;
begin
select sal into v_sal from emp where ename=upper(pnm);
return v_sal;
exception
when others then
dbms_output.put_line(sqlerrm);
end;
如下是调这个函数的语句块
declare
v_s number;
begin
v_s:=f1('smith');
dbms_output.put_line(v_s);
end;
如下是JAVA中调用
Connection connection=null;
CallableStatement statement=null;
OracleConnection conn=null;
try
{
Class.forName("oracle.jdbc.driver.OracleDriver");
//DriverManager.registerDriver("oracle.jdbc.driver.OracleDriver");
String url="jdbc:oracle:thin:@127.0.0.1:1521:ORCL";
String user="scott";
String password="tiger";
//下面是標準的的連接對象
//connection= DriverManager.getConnection(url, user, password);
//下面是在標準的連接不上時可以考慮的
conn=(OracleConnection) DriverManager.getConnection(url, user, password);
String strsql="{?=call f1(?)}";
statement= conn.prepareCall(strsql);
statement.setString(2, "smith");
statement.registerOutParameter(1, Types.FLOAT);
statement.execute();
float f= statement.getFloat(1);
System.out.println(f);
}
catch (ClassNotFoundException e)
{
e.printStackTrace();
}
finally
{
if(conn!=null)
{
conn.close();
}
if(connection!=null){
connection.close();
}
if(statement!=null){
statement.close();
}
}
总结:函数和存储过程的传入的参数类型:varchar2 number date emp.sal%type pl/sql中的表(数组) 引用的游标
缺点:返回值:单值,对集合数据没有用,所有就有下章节的程序包出现了
相关文章推荐
- Java 开发中之八:oracle中的子程序之在JAVA中如何调用程序包
- Java如何实现调用oracle带有返回值的存储过程
- Oracle数据库中调用Java类开发存储过程、函数的方法
- java调用oracle中输入参数是数组类型的函数或者存储过程
- Oracle数据库中调用Java类开发存储过程、函数的方法
- Java,PL/SQL调用 ORACLE存储函数以及存储过程
- java下实现调用oracle的存储过程和函数
- java 调用存储过程-oracle
- 游标、例外、存储过程、存储函数、java调用存储过程、触发器(Oracle之二)
- 游标、例外、存储过程、存储函数、java调用存储过程、触发器(Oracle之二)
- 【iOS-cocos2d-X 游戏开发之十三】详细讲解在Xcode中利用预编译并通过Jni调用Android的Java层代码(cocos2dx里访问调用Android函数)!
- sqlserver存储过程如何调用自定义函数
- java开发C编译器:把函数调用编译成字节码
- 类反射学习(三) JAVA如何利用类反射调用普通函数、访问成员成员变量
- 最完整的:JAVA调用ORACLE的存储过程、函数的返回结果集例子
- 如何用JAVA调用存储过程
- 在JAVA里面如何调用ORCALE数据库里的存储过程(带输入输出参数)的????
- Oracle全文检索建索引,存储过程,以及java方法调用高亮显示
- 如何实现在Oracle中应用存储过程调用MatLab函数(1)
- objective-c开发iosapp如何实现一个页面通知另一个页面调用某函数?