sql >> データベース >  >> RDS >> Oracle

Javaプログラムで呼び出すJavaストアドプロシージャ

    値を返すには、プロシージャではなく関数である必要があります。

      public static String getBreweryInfo (int Raz_ID) 
      throws SQLException 
      { 
        String sql = 
          "SELECT Nosaukums FROM Alus_razotaji WHERE ID = ?";//vaicajums
        try {
          Connection conn = DriverManager.getConnection("jdbc:default:connection:");
          PreparedStatement apstmt = conn.prepareStatement(sql);
          apstmt.setInt(1, Raz_ID); 
          ResultSet rset = apstmt.executeQuery();// SQL vaicājuma izpildīšana
    
          if (rset.next()) {
              return rset.getString(1);
          } 
        }
        catch (SQLException e) {
          System.err.println(e.getMessage()); //Kļūdu izvadīsana
        } 
        finally {
          rset.close();
          apstmt.close(); //Savienojuma aizvēršana
        } 
      }
    

    次に、パッケージは次のようになります。

    CREATE OR REPLACE PACKAGE BODY BeerBeer AS
      FUNCTION getBreweryInfo(Raz_ID number) RETURN varchar2 AS Language Java
      NAME 'BeerBeer.getBreweryInfo(int) return java.lang.String';
    END BeerBeer;
    

    そして、あなたはそれを次のように呼びます:

            String SQL = "{CALL ? = BeerBeer.getBreweryInfo (?)}";
            stmt = conn.prepareCall(SQL);
            int Raz_ID = 4;
            stmt.registerOutParameter(1, java.sql.Types.VARCHAR);
            stmt.setInt(2, Raz_ID);
            System.out.println("Izpildam JAVA glabajamo proceduru ...");
            // Vaicājuma izpilde
            stmt.execute();
            //Izgustam Alus_razotaja nosaukumu ar getXXX metodi.
            String Razotajs = stmt.getString(1);
    

    outパラメータは、関数からの戻り値であるため、インデックス1になっていることに注意してください。したがって、渡す値はインデックス2になります。もちろんすべてテストされていません...



    1. アダプティブダイナミック統計は12.1.0.2RACのパフォーマンスを低下させます

    2. Oracleディクショナリ・ビューを使用してPL/SQLパッケージレベルのタイプを検出

    3. ODP.NETを使用した名前によるクエリパラメータのバインド

    4. MySQLのバージョンを確認する方法