<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    小菜毛毛技術分享

    與大家共同成長

      BlogJava :: 首頁 :: 聯系 :: 聚合  :: 管理
      164 Posts :: 141 Stories :: 94 Comments :: 0 Trackbacks
    前提是數據庫上需要安裝java虛擬機(JVM),使用下面的語句查看
    select * from dba_registry where comp_id = 'JAVAVM'  
    為空,則未安裝,請執行 $ORACLE_HOME/javavm/install/initjvm.sql安裝.

    一、如何創建java存儲過程?
    通常有三種方法來創建java存儲過程。

    1. 使用oracle的sql語句來創建:

    e.g. 使用create or replace and compile java source named "<name>" as
           后邊跟上java源程序。要求類的方法必須是public static的,才能用于存儲過程。

    SQL> create or replace and compile java source named "javademo1"
      2  as
      3  import java.sql.*;
      4  public class JavaDemo1
      5  {
      6  public static void main(String[] argv)
      7  {
      8  System.out.println("hello, java demo1");
      9  }
     10  }
     11  /

    Java 已創建。

    SQL> show errors java source "javademo1"
    沒有錯誤。

    SQL> create or replace procedure javademo1
      2  as
      3  language java name ''JavaDemo1.main(java.lang.String[])'';
      4  /

    過程已創建。

    SQL> set serveroutput on
    SQL> call javademo1();

    調用完成。

    SQL> call dbms_java.set_output(5000);

    調用完成。

    SQL> call javademo1();
    hello, java demo1

    調用完成。

    SQL> call javademo1();
    hello, java demo1
    調用完成。
    2. 使用外部class文件來裝載創建
    e.g. 這里既然用到了外部文件,必然要將class文件放到oracle Server的某一目錄下邊。


    public class OracleJavaProc
    {
        public static void main(String[] argv)
        {
            System.out.println("It''s a Java Oracle procedure.");
        }
    }


    SQL> grant create any directory to scott;

    授權成功。

    SQL> conn scott/tiger@iihero.oracledb
    已連接。
    SQL> create or   replace   directory   test_dir   as  ''d:\oracle'';

    目錄已創建。

    SQL> create or replace java class using bfile(test_dir, ''OracleJavaProc.CLASS'')
      2  /

    Java 已創建。

    SQL> create or replace procedure testjavaproc as language java name ''OracleJavaProc.main(java.lang.String[])'';
      2  /

    過程已創建。

    SQL> call testjavaproc();

    調用完成。

    SQL> execute testjavaproc;

    PL/SQL 過程已成功完成。

    SQL> set serveroutput on size 5000
    SQL> call dbms_java.set_output(5000);

    調用完成。

    SQL> execute testjavaproc;
    It''s a Java Oracle procedure.
    3. 我推薦的一種方法,直接使用loadjava命令遠程裝載并創建。
        先創建一個類, e.g.


    import java.sql.*;
    import oracle.jdbc.*;

    public class OracleJavaProc ...{

       //Add a salgrade to the database.
       public static void addSalGrade(int grade, int losal, int hisal) ...{

          System.out.println("Creating new salgrade for EMPLOYEE...");

          try ...{
             Connection conn =
                DriverManager.getConnection("jdbc:default:connection:");

             String sql =
                "INSERT INTO salgrade " +
                "(GRADE,LOSAL,HISAL) " +
                "VALUES(?,?,?)";
             PreparedStatement pstmt = conn.prepareStatement(sql);
             pstmt.setInt(1,grade);
             pstmt.setInt(2,losal);
             pstmt.setInt(3,hisal);
             pstmt.executeUpdate();
             pstmt.close();
             }
          catch(SQLException e) ...{
             System.err.println("ERROR! Adding Salgrade: "
               + e.getMessage());
             }
       }
    }
    使用loadjava命令將其裝載到服務器端并編譯:


    D:eclipse3.1workspacedbtest>loadjava -u scott/tiger@iihero.oracledb -v -resolve Or
    acleJavaProc.java
    arguments: ''-u'' ''scott/tiger@iihero.oracledb ''-v'' ''-resolve'' ''OracleJavaProc.java''
    creating : source OracleJavaProc
    loading  : source OracleJavaProc
    resolving: source OracleJavaProc
    查詢一下狀態:


    連接到:
    Oracle9i Enterprise Edition Release 9.2.0.1.0 - Production
    With the Partitioning, OLAP and Oracle Data Mining options
    JServer Release 9.2.0.1.0 - Production

    SQL> SELECT object_name, object_type, status FROM user_objects WHERE object_type LIKE ''JAVA%'';

    OBJECT_NAME
    --------------------------------------------------------------------------------

    OBJECT_TYPE                          STATUS
    ------------------------------------ --------------
    OracleJavaProc
    JAVA CLASS                           VALID

    OracleJavaProc
    JAVA SOURCE                          VALID
    測試一下存儲過程:


    SQL> create or replace procedure add_salgrade(id number, losal number, hisal num
    ber) as language java name ''OracleJavaProc.addSalGrade(int, int, int)'';
      2  /

    過程已創建。

    SQL> set serveroutput on size 2000
    SQL> call dbms_java.set_output(2000);

    調用完成。

    SQL> execute add_salgrade(6, 10000, 15000);
    Creating new salgrade for EMPLOYEE...

    PL/SQL 過程已成功完成。

    SQL> select * from salgrade where grade=6;

         GRADE      LOSAL      HISAL
    ---------- ---------- ----------
             6      10000      15000
     

    二、如何更新你已經編寫的java存儲過程? 

    假如要往類OracleJavaProc里添加一個存儲過程方法,如何開發?
    正確的步驟應該是先dropjava, 改程序,再loadjava。

    e.g.修改OracleJavaProc類內容如下:


    import java.sql.*;
    import oracle.jdbc.*;

    public class OracleJavaProc ...{

       // Add a salgrade to the database.
       public static void addSalGrade(int grade, int losal, int hisal) ...{

          System.out.println("Creating new salgrade for EMPLOYEE...");

          try ...{
             Connection conn =
                DriverManager.getConnection("jdbc:default:connection:");

             String sql =
                "INSERT INTO salgrade " +
                "(GRADE,LOSAL,HISAL) " +
                "VALUES(?,?,?)";
             PreparedStatement pstmt = conn.prepareStatement(sql);
             pstmt.setInt(1,grade);
             pstmt.setInt(2,losal);
             pstmt.setInt(3,hisal);
             pstmt.executeUpdate();
             pstmt.close();
             }
          catch(SQLException e) ...{
             System.err.println("ERROR! Adding Salgrade: "
               + e.getMessage());
             }
       }
      
       public static int getHiSal(int grade)
       ...{
        try ...{
            Connection conn =
              DriverManager.getConnection("jdbc:default:connection:");
            String sql = "SELECT hisal FROM salgrade WHERE grade = ?";
            PreparedStatement pstmt = conn.prepareStatement(sql);pstmt.setInt(1, grade);
            ResultSet rset = pstmt.executeQuery();
            int res = 0;
            if (rset.next())
            ...{
                res = rset.getInt(1);
            }
            rset.close();
            return res;
           }
        catch (SQLException e)
        ...{
            System.err.println("ERROR! Querying Salgrade: "
               + e.getMessage());
              return -1;
        }   
       }
         
    }

    如何更新呢?


    D:eclipse3.1workspacedbtest>dropjava -u scott -v OracleJavaProc

    D:/tiger@iihero.oracledbeclipse3.1workspacedbtest>loadjava -u scott -v -resolve Or
    acleJavaProc/tiger@iihero.oracledb.java
    arguments: ''-u'' ''scott/tiger@iihero.oracledb'' ''-v'' ''-resolve'' ''OracleJavaProc.java''
    creating : source OracleJavaProc
    loading  : source OracleJavaProc
    resolving: source OracleJavaProc
    后邊的應用示例:


    SQL> create or replace function query_hisal(grade number) return number as langu
    age java name ''OracleJavaProc.getHiSal(int) return int'';
      2  /

    函數已創建。

    SQL> set serveroutput on size 2000
    SQL> call dbms_java.set_output(2000);

    調用完成。
    SQL> select query_hisal(5) from dual;

    QUERY_HISAL(5)
    --------------
              9999
    全文完!

     

    本文來自CSDN博客,轉載請標明出處:http://blog.csdn.net/thinker28754/archive/2009/03/07/3962989.aspx


    posted on 2010-02-04 12:36 小菜毛毛 閱讀(9209) 評論(1)  編輯  收藏 所屬分類: 數據庫

    Feedback

    # 啊啊[未登錄] 2014-05-19 18:14 啊啊
    啊啊  回復  更多評論
      

    主站蜘蛛池模板: a级毛片免费高清视频| 亚洲短视频在线观看| 爱情岛论坛免费视频| 国产在线不卡免费播放| 国产亚洲人成在线影院| yy6080亚洲一级理论| 国产精品免费久久久久久久久 | 91麻豆国产自产在线观看亚洲| 午夜肉伦伦影院久久精品免费看国产一区二区三区 | 亚洲综合另类小说色区色噜噜| 色吊丝性永久免费看码| 久久乐国产精品亚洲综合| 中国性猛交xxxxx免费看| 日韩亚洲人成在线综合日本| 久久精品乱子伦免费| 亚洲国产美女精品久久| 成年在线观看免费人视频草莓| 亚洲欧洲无码AV不卡在线| 免费看国产一级片| 男女一边摸一边做爽的免费视频 | 亚洲五月综合网色九月色| 午夜一区二区免费视频| 乱人伦中文视频在线观看免费| 亚洲日本一区二区三区在线| 午夜影院免费观看| 亚洲AV永久无码精品水牛影视| 东方aⅴ免费观看久久av| 噜噜噜亚洲色成人网站∨| 麻豆国产入口在线观看免费| 一级成人a做片免费| 亚洲人成在线观看| 免费黄网在线观看| 国产精品免费观看视频| 亚洲a视频在线观看| 精品亚洲成α人无码成α在线观看| 69视频在线是免费观看| 狼人大香伊蕉国产WWW亚洲| 亚洲va无码手机在线电影| 成人免费看吃奶视频网站| 中文字幕免费观看视频| 亚洲制服丝袜第一页|