JAVA儲存過程(轉)

zhouwf0726發表於2019-02-09
從Oracle8i起,Oracle就在資料庫內部包含了JVM.在資料庫中包含JVM可以使JAVA方法在資料庫內部執行.
  JAVA儲存過程實際上是一種方法,但是JAVA要求之一就是任何事物都必須屬於某個類(即,必須是static方法).
  為了與資料庫進行互動,JAVA方法需要取得某個連線.當方法在資料庫內作為儲存過程執行時,有兩種方式實現此連線.
  
  DriverManager.defaultConnection();
  DriverManager.getConnection("jdbc:default:connection");

  第一種方法總是返回同一個Connection物件,而二個方法每次都返回新的物件.

  為了在資料庫外面測試JAVA儲存過程,需要使用Oracle JDBC在main()方法內取得一個連線.

  通過命令列:loadjava可以把JAVA原始碼,類或jar或zip檔案裝入資料庫.如果裝入的是原始碼,在預設的情況下是不會編譯這些原始碼,直到第一次呼叫時才編譯.如果加上 -resolve選項,則立即進行編譯.

  loadjava -resolve -user username/password javaFile.java

  也可以在除錯成功的JAVA檔案頭部加入:
  CREATE OR REPLACE AND RESOLVE JAVA SOURCE NAMED "JavaClassTest" AS  如下:
  CREATE OR REPLACE AND RESOLVE JAVA SOURCE NAMED "JavaClassTest" AS
  import java.sql.*;
  import oracle.jdbc.*;
  ...
  //JAVA類的主體
  ...
  
  然後在SQL PLUS裡,或TOAD裡直接執行.


  為了使用儲存過程,需要建立呼叫規範,把引數和返回型別對映為PL/SQL型別,即釋出儲存過程.

  語法如下:
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;
  的格式呼叫此函式.

  在JAVA中,OUT或IN OUT引數必須對應為陣列型別,即一般是適當型別的單元素陣列,如:

Java方法:
--------------------------------------------------------------
public static void myMethod(int GUID,String[] outName){
outName[0] = myMethod(GUID);
}

Oracle儲存過程
--------------------------------------------------------------
CREATE OR REPLACE PROCEDURE JAVA_TEST2(I_GUID IN NUMBER,O_NAME OUT VARCHAR2) AS
LANGUAGE JAVA
NAME 'JavaClassTest.myMethod(int,java.lang.String[])';

--------------------------------------------------------------
SET SERVEROUT ON
DECLARE
OUTVAR VARCHAR2(200);
BEGIN
JAVA_TEST2(3493,OUTVAR);
DBMS_OUTPUT.PUT_LINE(OUTVAR);
END;


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/756652/viewspace-242212/,如需轉載,請註明出處,否則將追究法律責任。

相關文章