今天听到java 源这个东西,开始不知道是什么,就想去试一下,感觉有些用,主记了下了.
1.oracle存储过程中取得连接的方法
DriverManager.defaultConnection();
DriverManager.getConnection("jdbc:default:connection");
对于oracle存储过程,做一个小例子
先创建一个java源
create or replace and compile java source named "li_javaDemo1"--双引号引起来
as
import java.sql.*;
public class JavaDemo1{
public static void main(String arg[]){
System.out.println("hello world!");
}
//用于做只有输入参数的存储过程调用的测试
public static void dist(String t){
if(t.equals("li")){
System.out.println("hello world! your first name is "+t);
}else{
System.out.println("hello world! i donot know your firstname "+t);
}
}
//用于做带有输出参数的存储过程调用的测试
public static void dis(String t,String[] outval){
System.out.println("the String you input is : "+t);
outval[0]=t;
}
//用于做函数测试
public static int dis(int t){
System.out.println("the number you input is "+t);
return t*30;
}
}
/
建立存储过程和函数
create or replace procedure li_p_javaDemo(tmp varchar2)
is
--language java name 'JavaDemo1.main(java.lang.String[])';
language java name 'JavaDemo1.dist(java.lang.String)';
/
--注意:在JAVA中,OUT或IN OUT参数必须对应为数组类型,即一般是适当类型的单元素数组
但是对于该实例.只能有一个输出参数,百思不得其解.如果有两个的话,运行时就会报错
create or replace procedure li_p_javaDemo1(tmp varchar2,ret out varchar2)
is
language java name 'JavaDemo1.dis(java.lang.String,java.lang.String[])';
/
create or replace function li_f_javademo(tmp number) return number
as
language java name 'JavaDemo1.dis(int)return int';
/
---------------------------------------------------------------------------------------------------
对于函数的调用:
select li_f_javademo(20) from dual
对于有输出参数过程的调用
set serveroutput oncall dbms_java.set_output(3000) ;
declare
v_1 varchar2(20):='zhou';
v_2 varchar2(20);
begin
li_p_javaDemo1(v_1,v_2);
dbms_output.put_line(v_2);
end;
-------------------------------------------------------------------------------------
总结一下:
在oracle内用java 源的语法
CREATE OR REPLACE AND RESOLVE JAVA SOURCE NAMED "JavaSourceName" AS
import java.sql.*;
import oracle.jdbc.*;
...
//JAVA类的主体
...
--------------------------------------------------------------------
使用java 源的方法
CREATE [OR REPLACE] FUNCTION funciton_name [(parameter_list)]
RETURN SQL_TYEP {AS | IS}
LANGUAGE JAVA
NAME 'class_name.method_name([full_java_type[,...]]) return full_java_type';
CREATE [OR REPLACE] PROCEDURE procedure_name [(parameter_list)] {AS | IS}
LANGUAGE JAVA
NAME 'class_name.method_name([full_java_type[,...]])';
---------------------------------------------------------------
SELECT function_name(parm) FROM DUAL;
的格式调用此函数.
对于过程,和平常用的一样.