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

JDBCからOracleオブジェクト指向のPL/SQLメンバープロシージャを呼び出す

    jdbcoutを使用してPL/SQLブロックを解析および実行できます。 変数。次のような呼び出し可能なステートメントを準備できます。

    declare
        x foo_type;
    begin
        x := foo_type(5);
        x.proc(10);
        ? := x.func(2);
    end;
    

    次に、 CallableStatement.registerOutParameter ステートメントが実行された後、適切なgetを使用します 値を取得する関数。

    FOO_TYPEに直接アクセスできます Javaで直接入力しますが、本当にこれを実行しますか?実用的な例については、以下を参照してください。

    SQL> create or replace and compile java source named "TestOutParam" as
      2  import java.sql.*;
      3  import oracle.sql.*;
      4  import oracle.jdbc.driver.*;
      5  
      6  public class TestOutParam {
      7  
      8     public static int get() throws SQLException {
      9  
     10        Connection conn =
     11           new OracleDriver().defaultConnection();
     12  
     13        StructDescriptor itemDescriptor =
     14           StructDescriptor.createDescriptor("FOO_TYPE",conn);
     15  
     16        OracleCallableStatement call =
     17           (OracleCallableStatement) conn.prepareCall("declare\n"
     18              + "    x foo_type;\n"
     19              + "begin\n"
     20              + "    x := foo_type(5);\n"
     21              + "    x.proc(10);\n"
     22              + "    ? := x;\n"
     23              + "end;\n");
     24  
     25        call.registerOutParameter(1, OracleTypes.STRUCT, "FOO_TYPE");
     26  
     27        call.execute();
     28  
     29        STRUCT myObj = call.getSTRUCT(1);
     30  
     31        Datum[] myData = myObj.getOracleAttributes();
     32  
     33        return myData[0].intValue();
     34  
     35     }
     36  }
     37  /
    

    これは、メソッドregisterOutParameterの使用方法を示すテストクラスです。 SQLオブジェクトでは、次のように呼びましょう。

    SQL> CREATE OR REPLACE
      2  FUNCTION show_TestOutParam RETURN NUMBER
      3  AS LANGUAGE JAVA
      4  NAME 'TestOutParam.get() return java.lang.int';
      5  /
    
    Function created
    
    SQL> select show_testoutparam from dual;
    
    SHOW_TESTOUTPARAM
    -----------------
                   20
    



    1. SQLデータベースから動的にロードされた選択オプション値に基づいてテキスト値を入力します

    2. GraphQLとPostgreSQLを接続する方法

    3. INT列にNULL値を挿入します

    4. SchrödingersMySQLテーブル:存在しますが、存在しません