Как прочитать вывод строки из PL / SQL с помощью Java? - PullRequest
0 голосов
/ 14 мая 2018

У меня есть хранимая процедура для SQl, и я верну строку в качестве вывода, как показано ниже

create PROCEDURE "PRATIK"."PRC_test3" (IN param1 INT,
     param2 NVARCHAR(15),
     OUT outParam1 VARCHAR (2000)) 
    LANGUAGE SQLSCRIPT 
    SQL SECURITY INVOKER 
    --DEFAULT SCHEMA <default_schema_name>
    --READS SQL DATA AS 
    AS

BEGIN 
----------- ### Exception Handler ### ------------------------
DECLARE EXIT HANDLER FOR SQLEXCEPTION 
BEGIN 
outParam1 := 'SQL Exception occured. Error Code is: ' || ::SQL_ERROR_CODE || ' Error message is: ' || ::SQL_ERROR_MESSAGE;

END;

outparam1 := ' Param2: ' || :param2 || '| param1: ' || :param1;

END;

, и для чтения ее ответа у меня есть следующий код Java

 if (connection != null) {
              try {
           String Stm = "CALL \"PRATIK\".\"PRC_test3_2\"("+param1+",'"+param2+"',"+outparams1+")";

                 System.out.println("Connection to HANA successful!");
                 java.sql.Statement stmt = connection.createStatement();
                 java.sql.ResultSet resultSet = stmt.executeQuery(Stm);
                 resultSet.next();

                 String res1 = resultSet.getString(1);
                 System.out.println("This is the result of the query -- "+res1);
                 //System.out.println("METADATA -- "+resultSet.getMetaData());
            } catch (SQLException e) {
               System.err.println("Query failed!");
               System.err.println(e.getStackTrace());
               e.printStackTrace();
            }
     }

когда я выполняю этот код, он дает мне ошибку, что вывод не имеет тип resultSet.Ниже приведена трассировка стека.

Запрос не выполнен![Ljava.lang.StackTraceElement; @ 6504e3b2 com.sap.db.jdbc.exceptions.JDBCDriverException: SAP DBTech JDBC: инструкция SQL не генерирует набор результатов.в com.sap.db.jdbc.exceptions.SQLExceptionSapDB._newInstance (SQLExceptionSapDB.java:197) в com.sap.db.jdbc.exceptions.SQLExceptionSapDB.newInstance (SQLExceptionSapDB.java.bb).StatementSapDB.

Есть ли способ чтения строки вывода из PL / SQl из Java без изменения процесса SQL для получения результата в формате возврата SQL, как показано ниже

SELECT
         :param1 as "outParam1"
           FROM Dummy;

Ответы [ 2 ]

0 голосов
/ 14 мая 2018

Я работал только с H2Db с java, а не с PL / SQL, но я думаю, что Java будет таким же.То, как я это сделал, было похоже на то, что вам нужно подготовить оператор, а затем набор результатов для выполнения запроса.Вам не нужно boolean stmt, вы можете напрямую подготовить оператор, выполнить запрос и присвоить его результирующему набору.Ниже приведен фрагмент.Дайте мне знать, работает ли это решение.

    if (connection != null) {
              try {
                 String Stm = "CALL \"PRATIK\".\"PRC_test3_2\"("+param1+",'"+param2+"',"+outparams1+")";
                 System.out.println("Connection to HANA successful!");
                 PreparedStatement process = connection.prepareStatement(Stm).;
                 java.sql.ResultSet resultSet = process.executeQuery(Stm);
                 if(resultSet.next()){
                     while(resultSet.next()){
                         String res1 = resultSet.getString("name");
                         System.out.println("This is the result of the query -- "+res1);
                     }
                  }
                 //System.out.println("METADATA -- "+resultSet.getMetaData());
            } catch (SQLException e) {
               System.err.println("Query failed!");
               System.err.println(e.getStackTrace());
               e.printStackTrace();
            }
     }

ПРИМЕЧАНИЕ. Когда вы пытаетесь получить значение, вы можете передать имя столбца.Например, если вы пытаетесь получить имя, скажем, имя вашего столбца - «name», вам нужно передать getString («name»)

0 голосов
/ 14 мая 2018

Привет, Пратик, пройдите по ссылке ниже. Нам нужно использовать callableStatement, так как результат не будет работать

https://www.mkyong.com/jdbc/jdbc-callablestatement-stored-procedure-out-parameter-example/

...