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

動作する配列であるストアドプロシージャの出力パラメータを取得するにはどうすればよいですか?

    連想配列を使用しないでください-コレクションを使用してください:

    CREATE TYPE StringArray IS TABLE OF VARCHAR2(4000);
    CREATE TYPE CLOBArray   IS TABLE OF CLOB;
    

    次に、次のことができます:

    public void testString(Connection connection) {
      String[] values = { "alpha", "beta", "gamma" };
      try {
        OracleConnection oc = (OracleConnection) connection;
    
        ARRAY stringArray = oc.createARRAY( "STRINGARRAY", values ); // Upper case identifier
    
        OracleCallableStatement st = (OracleCallableStatement) oc.prepareCall(
          "begin test.upper( :in_array, :out_array ); end;"
        );
    
        st.setARRAYAtName( "in_array", stringArray );
        st.registerOutParameter( "out_array", Types.ARRAY, "STRINGARRAY"); // Upper case again
        st.execute();
    
        String[] result = (String[])st.getARRAY( 2 ).getArray();
    
        System.out.println("Length: " + result.length);
        System.out.println("First: " + result[0]);
      } (catch SQLException e) {
        // Handle error
      }
    }
    

    プロシージャへの入力としてPL/SQL連想配列を使用する必要がある場合は、コレクションを取得して適切なタイプの連想配列を出力する関数を記述し、それを呼び出します。

    BEGIN TEST.UPPER( TO_ASSOC_ARRAY( :in_collection ), :out_array ); END;
    

    注:この回答は、OracleConnection.createOracleArray()がないように見えるojdbc6.jarのOracleドライバーを使用することを前提としています。 メソッドですが、うまくいけば、oracle.sql.ARRAYを変更して移植可能になります java.sql.Arrayへ 新しい方法を使用します。




    1. SQLServerデータベースのすべてのデフォルト制約を削除する方法-SQLServer/TSQLチュートリアルパート94

    2. Androidエラー:接続プールが閉じられているため、この操作を実行できません

    3. MySQLは重複レコードを削除します

    4. 外部サーバーに参加/プッシュダウンする前にサブクエリの評価を強制する方法