Взаимодействие с командной строкой хранимых процедур Oracle Java

У меня есть забавное требование.

Нам нужно взаимодействие командной строки в хранимой процедуре Java. Несмотря на предоставление соответствующих разрешений с помощью команд dbms_java.grant_permission, я сталкиваюсь с java.io.IOException, где я читаю из System.in с помощью java.io.InputStreamReader.

В чем проблема?

Источник 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();
            }
        }
    }
}

person Shyam    schedule 21.07.2009    source источник
comment
В чем проблема? Вероятно, в трассировке стека, которую вы не включили в вопрос. :)   -  person Adam Paynter    schedule 21.07.2009
comment
возможно, включите код, который вы создали, а также   -  person northpole    schedule 21.07.2009
comment
Что звонит aFunction? Не могли бы вы предоставить нам трассировку стека с подробной информацией об ошибках?   -  person Adam Paynter    schedule 21.07.2009
comment
Извините, я не заметил тег oracle. Я очень сомневаюсь, что System.in доступен для хранимых процедур Java. Где вы ожидаете, что пользователь будет печатать свои ответы?   -  person Adam Paynter    schedule 21.07.2009


Ответы (1)


Вы не можете выполнять ввод-вывод на консоль из Oracle... ни в java, ни в PL/SQL, нигде. Oracle работает в отдельном от пользователя процессе, вполне вероятно, даже на другом компьютере, и в этом процессе выполняются хранимые процедуры Java. Вам понадобится код Java, работающий в клиентской системе, для выполнения консольного ввода-вывода.

person DCookie    schedule 21.07.2009