1. 程式人生 > >Java函式轉換成Oracle中的函式

Java函式轉換成Oracle中的函式

Oracle中有個非常強大的功能就是可以把Java編寫的函式轉換成Oracle資料庫中的函式.轉換之後我們可以像一般的函式那樣用它.因為Oracle本身就是Java開發的,所以自然能很好的和Java相容.我們就來說下具體怎麼操作.就舉一個簡單例子,建立一個生成檔案的函式.



1.第一步,建創java resource物件,它和function,procedure等物件一樣都是Oracle中的object.所以語法也有一點點類似.



create or replace and compile java source named createfile as --除開這一句下面的全部是標準的Java,如果你在eclipse中建立了一個class你可以原封不動複製過來.

--createfile是物件的名字,就像表名一樣.不過我們在函式的轉換中不會直接用到它.只要用到Java中的類名和其中的函式名.java source物件名和裡面java類名都不能重複.


package weiwenhp; --此處包名的定義也可以去掉不要.但如果以後建立類時想呼叫這個類則必須要加上package.
import java.io.*;
public class JavaClass
{
public static boolean createFile(String path,String fileName)
{
String fileInfo = path + "\\" + fileName;
File newFile = new File(fileInfo);
try{
return newFile.createNewFile();
}
catch (Exception e){
System.out.println(e.toString());
return false;
}
}
}



2.第二步.建立一個Oracle函式並引用上面的Java函式createFile



CREATE OR REPLACE FUNCTION newfile (path IN STRING,filename IN STRING)
RETURN boolean
IS
LANGUAGE JAVA
NAME 'weiwenhp.JavaClass.createFile(java.lang.String,java.lang.String) return boolean';


其中IS之前的語句是建立函式的標準語句.記得函式的引數和返回型別要和引用的java函式的引數和返回型別一致.後面的 LANGUAGE JAVA NAME是固定的關鍵字.

然後就是單引號中的內容了:格式是包名.類名.函式名(引數列表) return 函式返回型別.


到此任務完成.Oracle中產生了一個叫newfile的function.



3.寫一段pl/sql來驗證下.



declare
createresult boolean;
begin
createresult:= newfile ('d:\\','weiwenhp.txt'); --注意Java中字串是用雙引號,但Oracle中是用單引號.另外Java中區分大小寫.Oracle中不區分.但引號內的是區分的
if(createresult) then
dbms_output.put_line('create file success');
else
dbms_output.put_line('create file failed');
end if;
end;



4.補充,呼叫自定義的類



我們知道在Java中除了呼叫系統定義好的類外還可以呼叫自定義的類.在這裡也一樣可以做到.

假如我們再建立一個java source.要呼叫前面定義好的類JavaClass

create or replace and compile java source named newcreatefile as

import weiwenhp.JavaClass; --這裡就是呼叫之前建立的class,要注意的一點是之前定義的類一定要用到package才行.其中weiwenhp就是package的名字


--如果直接這樣呼叫會錯import JavaClass.


import java.io.*;

public class NewJavaClass
{
//...........
}