2009-07-21 16 views
0

私は面白い要件があります。Oracle Javaストアドプロシージャコマンドラインの対話

Javaストアドプロシージャでは、コマンドラインの対話が必要です。 dbms_java.grant_permissionコマンドを使用して適切なアクセス許可を付与しているにもかかわらず、java.io.InputStreamReaderを使用してSystem.inから読み取ったjava.io.IOExceptionが発生しています。

問題はどこですか?

Javaソースはここにある:

import java.io.BufferedReader; 
import java.io.IOException; 
import java.io.InputStreamReader; 

import java.sql.ResultSet; 
import java.sql.Statement; 
import java.sql.Connection; 
import java.sql.SQLException; 


import oracle.jdbc.driver.OracleDriver; 

public class ExecuteInteractiveBatch { 

    public static void aFunction() { 

     Connection connection = null; 
     try { 
      int rowFetched = 0; 

      connection = new OracleDriver().defaultConnection(); 

      Statement stmt = connection.createStatement(); 

      ResultSet rs = stmt.executeQuery("SELECT count(1) cnt from sometable where c = 2"); 

      int count = 0; 
      if (rs.next()) { 
       count = rs.getInt(1); 
      } 
      rs.close(); 
      stmt.close(); 
      rs = null; 
      stmt = null; 
      if (count == 1) { 
       System.out.println("Do you want to continue?"); 
       BufferedReader reader = new BufferedReader(new InputStreamReader(System.in)); 
       String response = reader.readLine(); 
       if ("Y".equalsIgnoreCase(response)) { 
        stmt = connection.createStatement(); 
        int rowsAffected = stmt.executeUpdate("DELETE from sometable where c=2"); 
        System.out.println("" + rowsAffected + " row(s) deleted"); 
        stmt.close(); 
       } 
      } 
     } catch (IOException ex) { 
      ex.printStackTrace(); 
     } catch (SQLException ex) { 
      ex.printStackTrace(); 
     } finally { 

      try { 
       if (connection != null || !connection.isClosed()) { 
        connection.close(); 
       } 
      } catch (SQLException ex) { 
       ex.printStackTrace(); 
      } 
     } 
    } 
} 
+1

問題はどこですか?おそらくあなたが質問に含まれていないスタックトレースにあります。 :) –

+1

には、あなたが作成したコードも含めることができます。 – northpole

+0

'aFunction'とは何ですか?詳細なエラー情報を提供するスタックトレースを提供できますか? –

答えて

6

あなたはどこにもなく、Javaではなく、PL/SQLに... Oracleの内部からコンソールへのI/Oを実行することはできません。 Oracleはユーザーとは別のプロセスで実行されていますが、別のコンピュータであっても、そのプロセスでJavaストアド・プロシージャが実行されています。コンソールI/Oを実行するには、クライアントシステム上で実行されているJavaコードが必要です。

関連する問題